- - PR -
削除クエリについて、教えてください。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-23 11:56
以下のようなテーブルAとBがあり、
Bと一致するAのデータを削除する場合、 どういったSQLを組めばよろしいでしょうか? テーブル:A ┌──┬──┬───┐ │1 │2 │3 │ ├──┼──┼───┤ │001 │000 │りんご│ ├──┼──┼───┤ │002 │001 │みかん│ ├──┼──┼───┤ │003 │001 │とまと│ ├──┼──┼───┤ │003 │002 │レモン│ ├──┼──┼───┤ │004 │001 │いちご│ └──┴──┴───┘ テーブル:B ┌──┬──┬───┐ │1 │2 │3 │ ├──┼──┼───┤ │003 │002 │レモン│ ├──┼──┼───┤ │004 │001 │いちご│ └──┴──┴───┘ ※上記のテーブルは共に同じレイアウトであり、 プライマリキーはフィールド1、2とします。 削除後のテーブルA ┌──┬──┬───┐ │1 │2 │3 │ ├──┼──┼───┤ │001 │000 │りんご│ ├──┼──┼───┤ │002 │001 │みかん│ ├──┼──┼───┤ │003 │001 │とまと│ └──┴──┴───┘ どうぞよろしくお願いいたします。 | ||||
|
投稿日時: 2007-05-23 12:23
DB等の環境がかかれていないけど、
現実的にはまず使えるであろう「EXISTS」句を調べると幸せになれるかもしれません。 | ||||
|
投稿日時: 2007-05-23 12:24
DELETE FROM A WHERE (1,2) IN ( SELECT 1,2 FROM B ) Oracle8でしか確かめたこと無いから間違ってたらごめん。 | ||||
|
投稿日時: 2007-05-23 12:48
INに1列しか使えないDBなら、
DELETE FROM A WHERE EXISTS ( SELECT * FROM B WHERE B.[1] = A.[1] AND B.[2] = A.[2] ) | ||||
|
投稿日時: 2007-05-23 13:40
ご回答ありがとうございました。
問題なく、削除されました。 頭の片隅で「EXISTS」の存在には気づいておりましたが、 プライマリキーがひとつの場合、INを使用して、 削除していたため、「EXISTS」に踏み切れませんでした。。。 INが複数の列との比較にも使えるとは今回初めて 知りました。 ご丁寧なアドバイスありがとうございました。 |
1