小编典典

MySQL UPDATE查询与子查询永远在一起

sql

我有一个MySQL UPDATE查询,需要很长时间才能完成。我是否错过了一种更简单的方法来获得相同的结果?

"UPDATE table2, table1
SET table2.id_occurrences = (SELECT SUM(IF(id = table2.id, 1, 0)) FROM table1)
WHERE table2.id = table1.id;"
  • table2包含的所有可能值id,每个值仅包含一条记录。
  • table1包含的一些值id,但是有多个记录有一些值。
  • 我需要更新记录中table2显示的相应值的出现次数idtable1。上面的查询完成了该工作,但是当table1包含500条记录和table230,000条记录时,大约需要3分钟。我有更大的表要处理,所以这太长了:)

提前致谢。


阅读 227

收藏
2021-03-08

共1个答案

小编典典

避免子查询,请使用联接:

UPDATE table2
LEFT JOIN table1 ON (table2.id = table1.id)
SET table2.id_occurrences = COUNT(table1.id)
GROUP BY table2.id

哦,UPDATE不支持GROUP BY。试试这个查询:

UPDATE table2
LEFT JOIN (
   SELECT id, COUNT(*) AS cnt FROM table1 GROUP BY id
) AS t1
ON (table2.id = t1.id)
SET table2.id_occurrences = t1.cnt
2021-03-08