是否有可能编写一个仅在实际提供数据时更改列的SQL UPDATE?
假设我在更新一篇文章。post有id、author、title和text。在更新post时,title和text的任一或两者都可以更改。
是否有一个可以根据所提供的数据动态更改UPDATE的SQL查询?在Nodejs中,它可能看起来是这样的:
const result = await pgClient.query("UPDATE post SET title = $1, text = $2 WHERE userId = $3",
["new title", undefined, "12345"]);还有一个附加的子句,上面写着“如果没有定义,就不要更新”。
发布于 2021-09-16 01:20:41
使用
UPDATE post
SET title = COALESCE($1, title)
, text = COALESCE($2, text)
WHERE userId = $3
AND (title <> $1 OR text <> $2);另外,添加一个额外的WHERE子句,以跳过不会更改任何内容的更新(但代价相同)。
在您的示例中,至少有一个非空参数必须实际不同才能产生影响。
如果列本身可以是NULL,则使用:
...
AND ($1 IS NOT NULL AND title IS DISTINCT FROM $1
OR $2 IS NOT NULL AND text IS DISTINCT FROM $2);请参见:
发布于 2021-09-16 00:25:57
像这样的事怎么样:
UPDATE post
SET title = CASE WHEN $1 IS NULL THEN title ELSE $1 END
....https://stackoverflow.com/questions/69201016
复制相似问题