加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 在一个命令中选择或插入一行

发布时间:2020-12-13 16:40:48 所属栏目:百科 来源:网络整理
导读:我使用PostgreSQL 9.0,我有一个只有一个人造键(自动递增序列)和另一个唯一键的表。 (是的,这个表有一个原因:))我想通过另一个键查找一个ID,或者如果不存在,插入它: SELECT idFROM mytableWHERE other_key = 'SOMETHING' 那么,如果不匹配: INSERT INTO
我使用PostgreSQL 9.0,我有一个只有一个人造键(自动递增序列)和另一个唯一键的表。 (是的,这个表有一个原因:))我想通过另一个键查找一个ID,或者如果不存在,插入它:
SELECT id
FROM mytable
WHERE other_key = 'SOMETHING'

那么,如果不匹配:

INSERT INTO mytable (other_key)
VALUES ('SOMETHING')
RETURNING id

问题是:可以通过在一个语句中进行这两个操作来保存DB的往返吗?如果不存在,我可以插入行:

INSERT INTO mytable (other_key)
SELECT 'SOMETHING'
WHERE NOT EXISTS (SELECT * FROM mytable WHERE other_key = 'SOMETHING')
RETURNING id

…但是没有给出现有行的ID。有任何想法吗?对other_key有一个独特的约束,如果这有帮助。

你试过联合吗?

编辑 – 这要求Postgres 9.1:

create table mytable (id serial primary key,other_key varchar not null unique);

WITH new_row AS (
INSERT INTO mytable (other_key)
SELECT 'SOMETHING'
WHERE NOT EXISTS (SELECT * FROM mytable WHERE other_key = 'SOMETHING')
RETURNING *
)
SELECT * FROM new_row
UNION
SELECT * FROM mytable WHERE other_key = 'SOMETHING';

结果是:

id | other_key 
----+-----------
  1 | SOMETHING
(1 row)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读