有一些限制:
RETURNING id
)
INSERT INTO tags (name, color, groupid)
SELECT 'test', '000000', 56
WHERE NOT EXISTS (
SELECT text FROM tags WHERE name = 'test' AND groupid = 56
)
RETURNING id
这有效-直到我需要获取现有ID的地步。有了这个我只能得到插入的ID。如果未插入SELECT语句,是否可以返回该值?
更新:
DO $$
BEGIN
IF NOT EXISTS (
SELECT text FROM tags WHERE name = 'test' AND groupid = 56
)
THEN
INSERT INTO tags (name, color, groupid)
VALUES ('test', '000000', 56) RETURNING id;
ELSE
RETURN SELECT text FROM tags WHERE name = 'test' AND groupid = 56;
END IF;
END
$$
使用这种格式进行测试-但这以一些错误结尾:
RETURN cannot have a parameter in function returning void
您可以使用CTE执行此操作。
信息中心具有源数据,因此请用您的PHP占位符替换那里的值。
如果存在现有记录,CTE将从并集的前半部分返回结果(因此将显示旧的ID),如果执行了插入操作,则后半部分将返回结果(因此将显示新的ID)。
WITH info (name, color, groupid) AS
(values('test','000000',56)),
trial AS (
INSERT INTO tags(name, color, groupid)
SELECT info.name, info.color, info.groupid
FROM info
WHERE NOT EXISTS (
SELECT * FROM tags t2
WHERE t2.name = info.name AND t2.groupid= info.groupid)
RETURNING id)
SELECT tags.id
FROM tags
INNER JOIN info ON tags.name = info.name AND tags.groupid= info.groupid
UNION ALL
SELECT trial.id
FROM trial;
SQL Fiddle示例:http ://sqlfiddle.com/#!15/a7b0f/2
使用CTE的Postgres手册页
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句