我有以下UPDATE语句
UPDATE stuff
SET stuff.total = t.total
FROM (
SELECT SUM(price) FROM things WHERE stuff_id = ? GROUP BY stuff_id
) t
WHERE stuff.id = ?
当things
中实际存在行时,这可以正常工作,但是当没有执行UPDATE时(我认为这是有意义的)。在这种情况下,将stuff.total
设置为0
的优雅方式是什么?我想在一个查询中执行此操作。
我已经尝试了SET stuff.total = coalesce(t.total, 0)
,但它没有效果。
答案 0 :(得分:1)
您尚未在正确的位置使用coalesce
。此外,GROUP BY
可以省略。试试这个问题:
UPDATE stuff
SET stuff.total = t.total
FROM (
SELECT coalesce(SUM(price), 0) FROM things WHERE stuff_id = ?) t
WHERE stuff.id = ?