MERGE文に助けられた話
SQLにて複雑な更新処理で困った時には・・・
仕事で複数のテーブルを表結合して、レコードを更新する際にUPDATE文だと実現が難しくて「う~ん。どうしよう。1回SELECT文発行して検索結果単位でループ処理でUPDATE文に主キーのパラメーターを渡そうかな。いや、Java処理内であんまり書きたくないな~。困った。」という際に使用しているDBがOracle11gだったのでMERGE文が使えると気付き、解決したという話。
以下を参考に記載。
■SQL
MERGE INTO テーブルA
USING (複数のテーブルを表結合)
ON (テーブルA.主キー = 表結合.主キー)
WHEN MATCHED THEN UPDATE SET テーブルA.削除フラグ = 1(論理削除)
「よっしゃ、これで解決!」と思って実行すると・・・・
ORA-30926(ソース表の安定したセット行を取合致得できません)
うーん、相変わらず分かり辛いっす。原因は表結合して条件に合致したレコードが複数取得されてレコードが増えた事でON句でシバかれたという話。DISTINCTで重複レコードを削除して解決。
かなめさんの説明を見て理解。助かります。