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

前端之家收集整理的这篇文章主要介绍了postgresql – 在一个命令中选择或插入一行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用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)
原文链接:https://www.f2er.com/postgresql/193164.html

猜你在找的Postgre SQL相关文章