> ID serial主键
> key varchar
> value varchar
我已经看到这个问题在这里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 iunion allselect ID,"value"from s
如果该行不存在,它将返回一个已存在的行。
BTW,如果对“key”/“value”使它唯一,那么它是主键,并且不需要ID列。除非“键”/“值”对中的一个或两个可以为空。
总结以上是内存溢出为你收集整理的如果不存在插入,否则返回postgresql中的id全部内容,希望文章能够帮你解决如果不存在插入,否则返回postgresql中的id所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)