MySQL:计算一个表中的记录,然后更新另一个表

dat*_*.io 31 mysql sql

有2个表/实体,非常简单的场景.

诗人 - 专栏:id,诗人,国家

国家 - 列:id,国家,计数

基本上,国家诗人具有一对多的映射,自然.例如,来自60个国家的1000名诗人.诗人中的每一位诗人都被国家领域赋予一个国家,其中包含了一个国家的国家.

国家的伯爵领域包含了来自这个国家的诗人中的诗人数量.

我的问题是如何使用一个SQL查询来计算诗人中的国家诗人数量,然后更新该国家的相应计数?

我试过了:

UPDATE poets, nations SET nations.count = COUNT(poets.id) GROUP BY poets.nation HAVING poets.nation = nations.id
Run Code Online (Sandbox Code Playgroud)

但它给出了#1064错误.还尝试在某处组合WHERE子句但它仍然拒绝工作.

任何的想法?

Zed*_*Zed 42

使用子查询:

UPDATE nations 
   SET count = (
       SELECT COUNT(id) 
         FROM poets 
        WHERE poets.nation = nations.id 
        GROUP BY id
       );
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于非常大的表(500000+记录),这可能会非常慢. (7认同)

mik*_*ian 23

你不需要GROUP BY,cf.:

UPDATE nations SET count = (
  SELECT COUNT(id) FROM poets 
    WHERE poets.nation = nations.id);
Run Code Online (Sandbox Code Playgroud)

或者更确切地说,对于GROUP BY,子查询将为没有诗人的国家返回NULL.如果没有GROUP BY,子查询在这种情况下将返回0.

  • 有/没有分组依据的 null/0 差异 - 这有帮助。感谢你 (2认同)