web-dev-qa-db-ja.com

別のテーブルのCOUNTで列を更新する

簡単な質問かもしれませんが、これら2つのクエリの違いは何ですか?

UPDATE table1, 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) AS B 
SET table1.Freq = B.idcount WHERE table1.id=B.id

そして

UPDATE table1 A INNER JOIN 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id) 
SET A.Freq = B.idcount
2
Googlebot

同じクエリ。異なる結合構文。

最初は古いスタイルのANSIで、後者は後にANSIになります。それらの間で選択する必要がある場合は、後者を選択します。

USINGの制限のため、どちらも使用しません(エイリアスは使用できません)。代わりに次のように書きます:

UPDATE table1 A 
INNER JOIN (SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) as B
  ON B.id = A.id 
SET A.Freq = B.idcount

USINGが推奨されない理由については、このOracleの回答を参照してください: https://stackoverflow.com/questions/456684/mixing-using-and-on-in-Oracle-ansi-join

そして、これはSQL Serverの同様の議論です: https://stackoverflow.com/questions/1599050/ansi-vs-non-ansi-sql-join-syntax

一般に、移植可能な方法でSQL構文を書くことに慣れます。コードを移植することは決してできませんが、少なくともスキルを複数のデータベースに移植することができます(これは一般に、ワントリックのポニーにならないようにするためのクールな方法です)。

3
Thomas Kejser