如何根据提供的数据 "Smart Update" 条目?

How to "Smart Update" an entry based on provided data?

是否可以编写 SQL UPDATE 仅在实际提供数据时才更改列?

假设我正在更新 post。 post 有一个 idauthortitletext。更新 post 时,titletext 之一或两者都可以更改。
是否有 SQL 查询可以根据提供的数据动态更改 UPDATE?在 Nodejs 中它可能看起来像这样 pg:

const result = await pgClient.query("UPDATE post SET title = , text =  WHERE userId = ", 
                                    ["new title", undefined, "12345"]);

附加条款说“如果未定义,不更新。”

这样的事情怎么样:

UPDATE  post
SET title = CASE WHEN  IS NULL THEN title ELSE  END
....

使用COALESCE():

UPDATE post
SET    title = COALESCE(, title)
     , text  = COALESCE(, text)
WHERE  userId = 
AND   (title <>  OR text <> );

此外,添加一个额外的 WHERE 子句以跳过不会更改任何内容(但成本相同)的更新。
在您的情况下,至少有一个非空参数实际上必须不同才能产生影响。
如果列本身可以是 NULL,请改用:

...
AND   ( IS NOT NULL AND title IS DISTINCT FROM 
    OR  IS NOT NULL AND text IS DISTINCT FROM );

参见:

  • How do I (or can I) SELECT DISTINCT on multiple columns?