0

複数の行をロックする必要がありますが、返される結果として 1 つの行のみを取得します。where id = 2

さて、私が理解したように、2つの可能な方法があります:

1) 2 つの異なるクエリを実行します。

-- get user data and lock that row
SELECT some_column FROM users WHERE id = 2 FOR UPDATE INTO my_var;

-- just lock another rows
SELECT some_column FROM users WHERE id IN(4,7) FOR UPDATE;

2)CTEと「偽の」更新を使用して、次のような1つのクエリを使用します。

WITH t AS(
    UPDATE users 
    SET some_column = some_column 
    WHERE id IN(2,4,7)
    returning some_column
)
SELECT some_column FROM t WHERE id = 2
INTO my_var;

では、どちらの方法がより適切でしょうか? またはさらに良い方法があるかもしれませんか?

4

2 に答える 2