Postgres:如何使用单个命令更新 table 中的多条记录
Postgres: How to update multiple records in a table with a single command
我有一个 table,我想更新多个字段以完成 table,以便填充所有字段,我如何在 Postgres 脚本中执行此操作?
我所能找到的就是如何一次更新一条记录,或者如何遍历并将所有内容更改为相同的值。
更新 100 条记录需要很长时间
oid
名字
昵称
多布
0
克里斯
交叉
1985 年 1 月 1 日
1
理查德
02Feb1896
2
迈克尔
米奇
3
乔纳森
目前我可以用以下内容更新一个字段:
UPDATE mytable SET nickname = 'Rick' Where oid = 1;
但是我该怎么做才能改变所有这些呢?
- 昵称 = ‘Rick’ 其中 oid = 1
- 昵称 = ‘Jono’ 其中 oid = 3
- dob = ‘03Mar1987’ 其中 oid = 2
- dob = ‘04Apr1988’ 其中 oid = 3
提前致谢
达斯
您可以使用 UPDATE ... FROM
并加入新值:
UPDATE mytable
SET nickname = coalesce(x.nickname, mytable.nickname)
dob = coalesce(x.dob, mytable.dob)
FROM (SELECT id,
max(nickname) AS nickname,
max(dob) AS dob
FROM (VALUES (1, 'Rick', NULL),
(3, 'Jono', NULL),
(2, NULL, '1987-03-03'),
(3, NULL, '1988-04-04')) AS y(id, nickname, dob)
GROUP BY id
) AS x
WHERE mytable.id = x.id;
由于 UPDATE
只能更改每一行一次,因此您必须按 id
进行聚合。
我有一个 table,我想更新多个字段以完成 table,以便填充所有字段,我如何在 Postgres 脚本中执行此操作? 我所能找到的就是如何一次更新一条记录,或者如何遍历并将所有内容更改为相同的值。
更新 100 条记录需要很长时间
oid | 名字 | 昵称 | 多布 |
---|---|---|---|
0 | 克里斯 | 交叉 | 1985 年 1 月 1 日 |
1 | 理查德 | 02Feb1896 | |
2 | 迈克尔 | 米奇 | |
3 | 乔纳森 |
目前我可以用以下内容更新一个字段:
UPDATE mytable SET nickname = 'Rick' Where oid = 1;
但是我该怎么做才能改变所有这些呢?
- 昵称 = ‘Rick’ 其中 oid = 1
- 昵称 = ‘Jono’ 其中 oid = 3
- dob = ‘03Mar1987’ 其中 oid = 2
- dob = ‘04Apr1988’ 其中 oid = 3
提前致谢 达斯
您可以使用 UPDATE ... FROM
并加入新值:
UPDATE mytable
SET nickname = coalesce(x.nickname, mytable.nickname)
dob = coalesce(x.dob, mytable.dob)
FROM (SELECT id,
max(nickname) AS nickname,
max(dob) AS dob
FROM (VALUES (1, 'Rick', NULL),
(3, 'Jono', NULL),
(2, NULL, '1987-03-03'),
(3, NULL, '1988-04-04')) AS y(id, nickname, dob)
GROUP BY id
) AS x
WHERE mytable.id = x.id;
由于 UPDATE
只能更改每一行一次,因此您必须按 id
进行聚合。