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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |