如何使用INSERT更新列.仅当旧值为NULL时冲突


INSERT INTO main_parse_user ("user_id","group_id", "username", "bio", "first_name") 
VALUES ($1,$2,$3,$4,$5) 
ON CONFLICT (user_id) 
DO UPDATE 
SET ("group_id", "username", "bio", "first_name") = (EXCLUDED.group_id, EXCLUDED.username, EXCLUDED.bio,EXCLUDED.first_name)

这是我的代码添加和编辑数据到数据库在同一时间

现在是这样的:

user_id|group_id|@username|bio|first_name

如果数据库先前有一个user_id,那么它编辑并将新请求中的数据添加到剩余字段

但是我需要做一点不同的。

假设数据库中有数据

12345|-10015488|@abcd|None|Dev

我添加了一个与ID完全相同的新行,但更改了bio

12345|-10015488|@abcd|Developer|Dev

当我在旧数据库中没有bio (None)时,我需要向数据库添加一个新值,如果最初在bio中有信息,则算法简单地跳过

您可以使用coalesce:

... DO UPDATE
SET (bio, first_name) =
(
coalesce(main_parse_user.bio, EXCLUDED.bio),
EXCLUDED.first_name
)

必须用表名限定原始列值,以消除与新值

的歧义。

最新更新