【发布时间】:2015-06-17 21:10:57
【问题描述】:
从表中删除,然后插入到同一个表并返回插入的值的CTE语法是什么?
在 2 小时的睡眠中运行,但看起来有些不对劲(除了这不会执行):
WITH delete_rows AS (
DELETE FROM <some_table> WHERE id = <id_value>
RETURNING *
)
SELECT * FROM delete_rows
UNION
(
INSERT INTO <some_table> ( id, text_field )
VALUES ( <id_value>, '<text_field_value>' )
RETURNING *
)
预期的行为是首先清除一个 ID 的所有记录,然后插入相同 ID 的记录(故意不是 upsert)并返回那些插入的记录(不是删除)。
【问题讨论】:
-
插入和删除似乎没有关联,但是您想从 both 操作中返回所有行吗?
-
@ErwinBrandstetter 可能真的不太关心 delete,但不确定这是一个好的语法,在我可以执行操作之后处理它订购
-
嗯,最后一点可能是个问题。请更新您的问题,定义您希望两者“按顺序”执行的方式确切。
-
感谢欧文,已更新;你是对的
标签: sql postgresql common-table-expression postgresql-9.2