【发布时间】:2014-05-07 17:18:02
【问题描述】:
我在 Postgres 9.3 中有一个简单的标签表:
CREATE TABLE tag (
id SERIAL PRIMARY KEY,
text TEXT NOT NULL UNIQUE
);
目前我可以很容易地插入一个新标签并取回新的 id:
INSERT INTO tag (text) VALUES ('hey') RETURNING id
但是我想检查该标签是否不存在(唯一约束),如果它确实存在,则返回现有标签的 id。
我尝试使用COALESCE 来实现:
SELECT COALESCE(
(SELECT id FROM tag WHERE text='hey'),
(INSERT INTO tag (text) VALUES ('hey') RETURNING id)
)
但不幸的是,虽然我相信这个逻辑是合理的,但看起来我不能在 COALESCE 中包含 INSERT 语句(在 INTO 处生成语法错误)。
最简单的方法是什么?
【问题讨论】:
标签: sql postgresql postgresql-9.3