我试图在 POSTGRES中 编写一个复杂的查询,这个问题是该子查询。
这是我的表(id是主键和自动递增):
id appid name 1 2 abc 2 2 cde
在此表中,我想获取id为“ xyz”且appid = 2的id,如果不存在,则插入并返回ID。
我知道有几个类似的问题,有些问的有些相同,我已经尝试过了,但似乎没有用。
这是我试图起诉的,但未能按预期进行:
INSERT INTO table_name (appid, name) SELECT 2, 'xyz' WHERE NOT EXISTS (SELECT id from table_name WHERE appid=2 AND name='xyz') returning id
当添加新元素并返回新添加元素的ID时,此方法效果很好,但当行已存在时不返回任何内容。
对于前
INSERT INTO table_name (appid, name) SELECT 2, 'abc' WHERE NOT EXISTS (SELECT id from table_name WHERE appid=2 AND name='abc') returning id
这不会返回任何东西。
你可以做:
with id as ( select id from table_name where appid = 2 and name = 'xyz' ), i as ( insert table_name (appid, name) select 2, 'xyz' where not exists (select 1 from id) returning id ) select id from id union all select id from i;