Mysql

按另一個表的 COUNT 更新一列

  • May 6, 2015

這可能是一個幼稚的問題,但是這兩個查詢有什麼區別,哪個是首選?

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

相同的查詢。不同的連接語法。

第一個是舊式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

請參閱此 Oracle 答案,了解為什麼USING不首選: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 語法。雖然您可能永遠不會移植您的程式碼,但您至少能夠將您的技能移植到多個數據庫中(這通常是一件很酷的事情,可以避免成為一招一式的小馬)。

引用自:https://dba.stackexchange.com/questions/56323