更新受组影响的所有行

Posted

技术标签:

【中文标题】更新受组影响的所有行【英文标题】:Update all rows affected by a group by 【发布时间】:2018-07-30 07:35:06 【问题描述】:

我有以下使用 PostgreSql 的查询:

SELECT SUM(table.a) 
FROM table 
GROUP BY table.b
HAVING SUM(table.a) > x;

现在我需要更新受先前查询影响的所有行中的列。

我尝试了以下解决方案:

UPDATE table 
SET c = 'value' 
WHERE (SELECT SUM(table.a) 
       FROM table 
       GROUP BY table.b) > x;

但我收到以下错误

作为表达式的子请求返回的不止一行

我找不到更新受 group by 影响的所有行中的列的解决方案。如果有人能给我指路,将不胜感激。

【问题讨论】:

你能用英文发表你的错误吗? 对不起,我编辑了我的帖子 请同时标记您正在使用的数据库引擎,它们的语法都有所不同,这有助于了解要定位哪一个 【参考方案1】:

您只想为那些 table.a 列值总和超过您定义的 x的值列表中具有 table.b 的行更新表行>

所以,我相信你想用这个:

UPDATE TABLE
   SET c = 'value'
 WHERE b IN (SELECT b
               FROM TABLE
              GROUP BY table.b
             HAVING SUM (table.a) > x));

【讨论】:

您可以通过从最里面的查询返回 b 并删除中间的查询来简化此操作 @SamiKuhmonen 你完全正确!谢谢你的意见:)

以上是关于更新受组影响的所有行的主要内容,如果未能解决你的问题,请参考以下文章

更新异常。 Mysql sql不同的行影响计数

行锁功过:怎么减少行锁对性能的影响?

MySQL 时间戳记录正在更新,但受影响的行仍然为 0

oracle mybatis 批量更新 怎么获取影响行数

mysqli->query 在更新时返回 true,但不影响行

07 | 行锁功过:怎么减少行锁对性能的影响?