我有以下交易:
BEGIN;
SELECT t1.a, t2.b
FROM table1 t1
INNER JOIN table2 t2 ON (t1.c = t2.c)
WHERE t1.cond;
UPDATE table1
SET d = 'Value'
WHERE cond;
COMMIT;
因为我正在使用相同的条件更新同一个表,所以我可以执行以下操作,放弃对事务的需要:
UPDATE table1
SET d = 'Value'
WHERE cond
RETURNING a;
这样,我将丢失 table2
中的 b
属性。我尝试了以下操作:
SELECT t1.a, t2.b
FROM table1 t1
INNER JOIN table2 t2 ON (t1.c = t2.c)
WHERE t1.a IN (
UPDATE table1
SET d = 'Value'
WHERE cond
RETURNING a
);
和:
SELECT t1.a, t2.b
FROM table1 t1
INNER JOIN table2 t2 ON (t1.c = t2.c)
INNER JOIN (
UPDATE table1
SET d = 'Value'
WHERE cond
RETURNING a
) u ON (t1.a = u.a);
这两个都产生了语法错误(第一个提示 UPDATE
,第二个提示 SET
)。
如有任何意见,我们将不胜感激。
最佳答案
像这样:
update table1 as t1
SET d = 'Value'
from table2 as t2
where t1.c = t2.c
and ...condition...
returning t1.a, t2.b;
关于sql - 如何以原子方式更新一个关系,结果接收一组与另一个关系连接的元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18067100/