如果不存在插入,否则返回postgresql中的id

如果不存在插入,否则返回postgresql中的id,第1张

概述我有一个简单的表在PostgreSQL有三列: > id serial主键 > key varchar > value varchar 我已经看到这个问题在这里SO:Insert, on duplicate update (postgresql)但我想知道如何获取id,如果它存在,而不是更新。如果标准做法是总是“插入”或“更新如果存在”,为什么?执行SELECT(LIMIT 1)的成本是否大于执行 我有一个简单的表在Postgresql有三列:

> 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存