我有以下声明
从my_table中选择id,title
返回一个id和标题列表,我需要将其作为新记录插入另一个表中:
insert another_table (key1, key2, title)
value ('1', '5555', 'first'),
('2', '5555', 'second'),
('3', '5555', 'thirds'),
('4', '5555', 'fourth')
key1和key2一起是键值,因此如果前一语句中设置的值在已经使用过的这两个id的编译中运行,则会发生pg sql错误。我查看了Merge解决方案,但我不确定如何将它与我的多值语句一起使用。你可以用这个资产我,或者建议一个好的,近乎解决方案吗?我需要它,以便我仍然可以在一个查询中插入多个值。
由于
答案 0 :(得分:0)
PostgreSQL 9.4 +
假设您有主键,请使用ON CONFLICT
子句:
insert into another_table (key1, key2, title)
values ('1', '5555', 'first'),
('2', '5555', 'second'),
('3', '5555', 'thirds'),
('4', '5555', 'fourth'),
('4', '5555', 'fourth')
on conflict do nothing;
在上面的陈述中, key1 (我的理解中的PK)值为 4 两次,但只存储了一次:
select * from another_table;
key1 | key2 | title
------+------+--------
1 | 5555 | first
2 | 5555 | second
3 | 5555 | thirds
4 | 5555 | fourth