sql - 有效地使用另一个表的聚合更新表

标签 sql postgresql

我正在使用

UPDATE main 
SET val = (
    SELECT SUM(..) 
    FROM other 
    WHERE main.id=other.main_id 
    GROUP BY main_id
)

但是 other 有可选的参与,所以当它运行时,如果在 other 表中找不到它,update 似乎会使 val 无效。相反,它应该只更新子查询中存在的 id 的 val。

我该如何解决这个问题?

编辑: 我设法通过添加来修复它

WHERE IN SELECT main_id FROM other 

最佳答案

update main 
set val = coalesce(
    select sum(..) 
    from other 
    where main.id=other.main_id 
    group by main_id
), val)

如果子查询返回 null,它会将 val 设置为 val

或者更好

update main 
set val = s.val_sum
from (
    select sum(..) as val_sum, main_id 
    from other 
    group by main_id
) s
where s.main_id = main.id

关于sql - 有效地使用另一个表的聚合更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331421/

相关文章:

postgresql - 使用本地数据库列出 docker 数据库

sql - postgresql 查询中的分区给出不明确的结果

sql - 在 SQL Server 2008 中计算以分钟为单位的时差

mysql - SQL 查询::计数中的参数?

django - 你将如何在 Django 中对此进行建模?

python - 在提交期间删除错误查询

sql - 将循环替换为 INSERT/UPDATE 的单个查询

sql - 根据另一列对一列进行计数

java - 如何使用deleteRow()方法从多个表中删除行

投票系统的Mysql唯一索引