如果不存在插入,否则返回postgresql中的id
发布时间:2020-12-13 16:46:26 所属栏目:百科 来源:网络整理
导读:我有一个简单的表在PostgreSQL有三列: id serial主键 key varchar value varchar 我已经看到这个问题在这里SO:Insert,on duplicate update (postgresql)但我想知道如何获取id,如果它存在,而不是更新。如果标准做法是总是“插入”或“更新如果存在”,为
我有一个简单的表在PostgreSQL有三列:
> id serial主键 我已经看到这个问题在这里SO:Insert,on duplicate update (postgresql)但我想知道如何获取id,如果它存在,而不是更新。如果标准做法是总是“插入”或“更新如果存在”,为什么?执行SELECT(LIMIT 1)的成本是否大于执行UPDATE? 我有以下代码 INSERT INTO tag ("key","value") SELECT 'key1','value1' WHERE NOT EXISTS ( SELECT id,"key","value" FROM tag WHERE key = 'key1' AND value = 'value1' ); 它的工作原理是它不插入如果存在,但我想得到的id。是否有一个“RETURNING id”子句或类似的东西,我可以在那里?
是的,有返回
INSERT INTO tag ("key","value") SELECT 'key1','value1' WHERE NOT EXISTS ( SELECT id,"value" FROM node_tag WHERE key = 'key1' AND value = 'value1' ) returning id,"value" 返回行(如果已存在) with s as ( select id,"value" from tag where key = 'key1' and value = 'value1' ),i as ( insert into tag ("key","value") select 'key1','value1' where not exists (select 1 from s) returning id,"value" ) select id,"value" from i union all select id,"value" from s 如果该行不存在,它将返回一个已存在的行。 BTW,如果对“key”/“value”使它唯一,那么它是主键,并且不需要id列。除非“键”/“值”对中的一个或两个可以为空。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |