是否有可能撰寫一個SQL UPDATE,只在實際提供資料的情況下改變列?
假設我正在更新一個帖子。一個post有一個id、author、title和text。當更新一個帖子時,title和text中的一個或兩個都可以改變。
是否有一個SQL查詢可以根據提供的資料動態地改變UPDATE?在Nodejs pg中,它可能看起來像這樣:
const result = await pgClient.query("UPDATE post SET title = 1, text = 2 WHERE userId = 3",
["new title", undefined, "12345"])。)
有一個額外的子句說 "如果未定義,就不要更新"
。uj5u.com熱心網友回復:
使用COALESCE():
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 NOTNULL AND title IS DISTINCT FROM $1
OR $2 IS NOT NULL AND text IS DISTINCT FROM $2)。)
見:
uj5u.com熱心網友回復:
如何像這樣:
UPDATE post
SET title = CASE WHEN $1 IS NULL THEN title ELSE $1 END
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306829.html
標籤:
上一篇:在Postgresql中連接兩列
