MERGE文に助けられた話

SQLにて複雑な更新処理で困った時には・・・

 仕事で複数のテーブルを表結合して、レコードを更新する際にUPDATE文だと実現が難しくて「う~ん。どうしよう。1回SELECT文発行して検索結果単位でループ処理でUPDATE文に主キーのパラメーターを渡そうかな。いや、Java処理内であんまり書きたくないな~。困った。」という際に使用しているDBがOracle11gだったのでMERGE文が使えると気付き、解決したという話。

以下を参考に記載。

第30回 UPDATEについて

SQL

MERGE INTO テーブルA
USING (複数のテーブルを表結合)
ON (テーブルA.主キー = 表結合.主キー)
WHEN MATCHED THEN UPDATE SET テーブルA.削除フラグ = 1(論理削除)

 

「よっしゃ、これで解決!」と思って実行すると・・・・
ORA-30926(ソース表の安定したセット行を取合致得できません)

うーん、相変わらず分かり辛いっす。原因は表結合して条件に合致したレコードが複数取得されてレコードが増えた事でON句でシバかれたという話。DISTINCTで重複レコードを削除して解決。

 

かなめさんの説明を見て理解。助かります。

kanamelogic.com