- - PR -
SQL DELETE文
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-27 13:49
DB2を使用しています。
どうしても自分では解決できないSQLがあり詳しい方がいらっしゃいましたら教えていただけないでしょうか。 以下の表のように削除フラグがすべて立っているレコードのみをすべて削除したい。 table1とtable2はKey1でLeftJoinされ、table2とtable3はKey1,Key2でLeftJoinされる。
| ||||||||||||
|
投稿日時: 2007-06-28 00:26
table1のDelFlgが0でtable2のDelFlgが1というデータはないのですよね?
次のSQLでどうでしょうか?申し訳ございませんが全く検証していません。 DELETE table3 WHERE DelFlg = 1 DELETE table2 WHERE DelFlg = 1 AND NOT EXISTS (SELECT * FROM table3 WHERE key1 = table2.key1 AND key2 = table2.key2 AND DelFlg = 0) DELETE table1 WHERE DelFlg = 1 AND NOT EXISTS (SELECT * FROM table2 WHERE key1 = table1.key1 AND DelFlg = 0) | ||||||||||||
|
投稿日時: 2007-06-28 00:44
よっしーさんのSQLですと、DELFLG = 0 ではなく、DELFLG is null でしょうね。
ただし、DELFLGの付与条件といいますか要件において T1|T2|T3| ●|●|●| ●|●|□| ●|□|□| ●:DELFLGあり □:DELFLGなし という関係だけが存在する、ということが前提です。 _________________ 片桐 継(Tugu Katagiri)@わんくま同盟 http://blogs.wankuma.com/esten | ||||||||||||
|
投稿日時: 2007-06-28 01:06
0なんてどこにもないですね。null(空白?)の誤りでした。
手抜きです。 でも、table1から消した方が簡単なのかも。 | ||||||||||||
|
投稿日時: 2007-06-28 01:29
Key1 = 'DDD', Key2 = '2' の行を追加しました。 また、列名などのオブジェクトをダブル・クォーテーション(")で囲って大文字・小文字を区別するのは、私の趣味では有りません(ケアレス・ミスを起こしやすいし、面倒だから)が、今回は「まー」さんの例に出来るだけ合わせるためにあえて使用しました。
| ||||||||||||
1
