1

次のトランザクションがあります。

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)。

これに関するご意見をいただければ幸いです。

4

1 に答える 1