次のトランザクションがあります。
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;
b
このようにすると、から属性が失われますtable2
。私は次のことを試みました:
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
、2 番目は について不平を言いましたSET
)。
これに関するご意見をいただければ幸いです。