
2つのテーブルで、共通する2つの項目をキーとして、一方に存在し他方に存在しないレコードをUPDATEするSQL文を記載する方法を教えていただけますでしょうか?
例として、IDとシーケンス番号を含む2つのテーブルがあるとして、テーブル1に存在してテーブル2に存在しないレコードの削除フラグを1にする処理を記載するとします。
テーブル1(シーケンス番号, ID, 削除フラグ)
テーブル2(シーケンス番号, ID)
この時、テーブル1にシーケンス番号とIDの組み合わせが存在し、テーブル2には存在しないものを抽出するSQLは下記のように記載することがわかっております。
SQL
1SELECT * 2FROM テーブル1 3LEFT JOIN テーブル2 4ON テーブル1.シーケンス番号 = テーブル2.シーケンス番号 5AND テーブル1.ID = テーブル2.ID 6WHERE テーブル2.シーケンス番号 IS NULL 7AND テーブル2.ID IS NULL
このSELECTを使って、UPDATE文を記載する場合、どのようにすればよいでしょうか?
よろしくお願いします。
追記
一度、下記のように記載しましたが、コードが長くなっています。
より短くかける方法をお願いします。
SQL
1UPDATE テーブル1 2SET 削除フラグ = '1' 3WHERE テーブル1.ID IN 4( 5SELECT テーブル1.ID 6FROM テーブル1 7LEFT JOIN テーブル2 8ON テーブル1.シーケンス番号 = テーブル2.シーケンス番号 9AND テーブル1.ID = テーブル2.ID 10WHERE テーブル2.シーケンス番号 IS NULL 11AND テーブル2.ID IS NULL 12) 13AND テーブル1.シーケンス番号 IN 14( 15SELECT テーブル1.シーケンス番号 16FROM テーブル1 17LEFT JOIN テーブル2 18ON テーブル1.シーケンス番号 = テーブル2.シーケンス番号 19AND テーブル1.ID = テーブル2.ID 20WHERE テーブル2.シーケンス番号 IS NULL 21AND テーブル2.ID IS NULL 22)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/27 05:03