首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据提供的数据“智能更新”条目?

如何根据提供的数据“智能更新”条目?
EN

Stack Overflow用户
提问于 2021-09-16 00:11:00
回答 2查看 35关注 0票数 1

是否有可能编写一个仅在实际提供数据时更改列的SQL UPDATE

假设我在更新一篇文章。postidauthortitletext。在更新post时,titletext的任一或两者都可以更改。

是否有一个可以根据所提供的数据动态更改UPDATE的SQL查询?在Nodejs中,它可能看起来是这样的:

代码语言:javascript
复制
const result = await pgClient.query("UPDATE post SET title = $1, text = $2 WHERE userId = $3", 
                                    ["new title", undefined, "12345"]);

还有一个附加的子句,上面写着“如果没有定义,就不要更新”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-16 01:20:41

使用

代码语言:javascript
复制
UPDATE post
SET    title = COALESCE($1, title)
     , text  = COALESCE($2, text)
WHERE  userId = $3
AND   (title <> $1 OR text <> $2);

另外,添加一个额外的WHERE子句,以跳过不会更改任何内容的更新(但代价相同)。

在您的示例中,至少有一个非空参数必须实际不同才能产生影响。

如果列本身可以是NULL,则使用:

代码语言:javascript
复制
...
AND   ($1 IS NOT NULL AND title IS DISTINCT FROM $1
    OR $2 IS NOT NULL AND text IS DISTINCT FROM $2);

请参见:

票数 2
EN

Stack Overflow用户

发布于 2021-09-16 00:25:57

像这样的事怎么样:

代码语言:javascript
复制
UPDATE  post
SET title = CASE WHEN $1 IS NULL THEN title ELSE $1 END
....
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69201016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档