use*_*521 2 postgresql upsert postgresql-9.3
WITH upsert AS (UPDATE tbl SET a = 2 WHERE a = 1 RETURNING tbl.*)
INSERT INTO tbl (a)
SELECT 1 WHERE NOT EXISTS( SELECT * FROM upsert )
RETURNING *
Run Code Online (Sandbox Code Playgroud)
这个“upsert”语句有效,但是我想检索 UPDATE 或 INSERTED 值。当 upsert 执行INSERT
(行尚未在 db 中)时,插入的值将从查询中正确返回。
但是,当UPDATE
执行时,不会返回任何值(但行是更新的)。我试过添加,RETURNING upsert.*
但它产生错误missing FROM-clause entry for table \"upsert\"
。
您需要为 INSERT 使用第二个 CTE:
WITH upsert AS (
UPDATE tbl SET a = 2
WHERE a = 1
RETURNING tbl.*
), inserted AS (
INSERT INTO tbl (a)
SELECT 1 WHERE NOT EXISTS( SELECT * FROM upsert )
RETURNING *
)
select *
from upsert
union all
select *
from inserted
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3010 次 |
最近记录: |