SQL のみを使用して更新前の列の値を取得する
トリガーを使用せずに、更新後に行内の列の元の値を取得し、格納プロシージャやその他の外部エンティティは、SQL で繰り返し発生する課題です。これに対処するために、さまざまなアプローチを検討します。
初期の試行と欠点
元の質問で述べたように、サブクエリで FOR UPDATE を使用します。 GROUP BY 句を含むことは実現できません。
テーブル エイリアスを使用した解決策
最も簡単な解決策は、テーブル エイリアスを使用してテーブルをそれ自体と結合することです。テーブルに別名を付けることで、元の値と更新された値の両方にアクセスできます。次の更新クエリを考えてみましょう。
UPDATE my_table x SET processing_by = our_id_info FROM my_table y WHERE x.trans_nbr = y.trans_nbr AND x.row_id = y.row_id RETURNING y.processing_by AS old_processing_by, x.processing_by;
同時書き込み操作の処理
同時書き込み操作が結果に影響を与えるのを防ぐために、FOR UPDATE を利用できます。サブクエリ内の 句。これにより、サブクエリによってロックされた行のみが処理されるようになります。
UPDATE tbl x SET tbl_id = 24, name = 'New Gal' FROM (SELECT tbl_id, name FROM tbl WHERE tbl_id = 4 FOR UPDATE) y WHERE x.tbl_id = y.tbl_id RETURNING y.tbl_id AS old_id, y.name AS old_name, x.tbl_id, x.name;
その他の考慮事項
以上がトリガーやストアド プロシージャを使用せずに SQL で更新前の列の値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。