按另一个表的 COUNT 更新列

Goo*_*bot 3 mysql performance join subquery update query-performance

这可能是一个幼稚的问题,但这两个查询有什么区别,哪个是首选?

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

UPDATE table1 A INNER JOIN 
(SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) B USING (id) 
SET A.Freq = B.idcount
Run Code Online (Sandbox Code Playgroud)

Tho*_*ser 5

同样的查询。不同的连接语法。

第一个是旧式 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
Run Code Online (Sandbox Code Playgroud)

请参阅此 Oracle 答案,了解为什么USING不首选:/sf/ask/31967911/

这是针对 SQL Server 的类似讨论:/sf/ask/111933531/

一般来说,习惯以可移植的方式编写 SQL 语法。虽然您可能永远不会移植代码,但您至少能够将您的技能移植到多个数据库(这通常是一件很酷的事情,可以避免成为只会一招的小马)。