将多个upsert语句的结果捕获到Postgresql的一个输出中
我在一次运行中运行多个upsert语句。可以根据数据添加或更新查询。可以知道是否发生了新的插入 test_unique是列1和列2的唯一约束将多个upsert语句的结果捕获到Postgresql的一个输出中,sql,postgresql,upsert,knex.js,Sql,Postgresql,Upsert,Knex.js,我在一次运行中运行多个upsert语句。可以根据数据添加或更新查询。可以知道是否发生了新的插入 test_unique是列1和列2的唯一约束 insert into test(column1,column2) values(1,1) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING; insert into test(column1,column2) values(1,2) ON CONFLICT ON CONSTRAINT test_unique
insert into test(column1,column2) values(1,1) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;
insert into test(column1,column2) values(1,2) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;
insert into test(column1,column2) values(1,1) ON CONFLICT ON CONSTRAINT test_unique DO NOTHING;
如果我们接受上述问题
- 第一个查询将插入新行
- 第二个查询还将插入新行
- 第三个查询将不起任何作用
谢谢您可以使用
返回
:
with i1 as (
insert into test(column1,column2) values(1,1)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
),
i2 as (
insert into test(column1,column2) values(1,2)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
),
i3 as (
insert into test(column1,column2) values(1,1)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
)
select id from i1 union all
select id from i2 union all
select id from i3;
您可以使用
返回:
with i1 as (
insert into test(column1,column2) values(1,1)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
),
i2 as (
insert into test(column1,column2) values(1,2)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
),
i3 as (
insert into test(column1,column2) values(1,1)
ON CONFLICT ON CONSTRAINT test_unique DO NOTHING
returning *
)
select id from i1 union all
select id from i2 union all
select id from i3;