【发布时间】:2019-06-04 05:26:15
【问题描述】:
这个问题是this one的延续。
我有下表egr:
+---------+---------+------------+
| egrid | offid | groupid |
+---------+---------+------------+
| 1000 | 1 | 101 |
| 1001 | 1 | 202 |
| 1002 | 2 | 202 |
| 1003 | 2 | 404 |
+---------+---------+------------+
注意egrid 是一个序列。
我想插入 offid 2 没有的缺失 groupid(与 offid 1 相比)。结果是:
+---------+---------+------------+
| egrid | offid | groupid |
+---------+---------+------------+
| 1000 | 1 | 101 |
| 1001 | 1 | 202 |
| 1002 | 2 | 202 |
| 1003 | 2 | 404 |
| 1004 | 2 | 101 | --> new row to insert
+---------+---------+------------+
我在下面的尝试,基于我的另一个问题的答案(不工作)。 我遇到的问题是序列随 select 语句递增。但是如果有 555 行 offid = 1,它将增加 555 倍,尽管最后只会插入一些。我正在寻找更好的方法。
INSERT INTO egr (egrid, offid, groupid)
SELECT nextval('seq_egrid'), 2, groupid
FROM egr
WHERE offid = 1
EXCEPT
SELECT egrid, 2, groupid
FROM egr
WHERE offid = 2
ON CONFLICT DO NOTHING;
【问题讨论】:
标签: sql postgresql