- PR -

削除クエリについて、教えてください。

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/04/27
投稿数: 15
投稿日時: 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 │とまと│
└──┴──┴───┘

どうぞよろしくお願いいたします。



かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2007-05-23 12:23
DB等の環境がかかれていないけど、
現実的にはまず使えるであろう「EXISTS」句を調べると幸せになれるかもしれません。
宣伝中止!
大ベテラン
会議室デビュー日: 2005/08/30
投稿数: 155
お住まい・勤務地: 東京に作業場所変更・・・
投稿日時: 2007-05-23 12:24
引用:

未記入さんの書き込み (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 │とまと│
└──┴──┴───┘

どうぞよろしくお願いいたします。







DELETE FROM A
WHERE (1,2) IN
(
SELECT 1,2 FROM B
)

Oracle8でしか確かめたこと無いから間違ってたらごめん。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 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/04/27
投稿数: 15
投稿日時: 2007-05-23 13:40
ご回答ありがとうございました。
問題なく、削除されました。
頭の片隅で「EXISTS」の存在には気づいておりましたが、
プライマリキーがひとつの場合、INを使用して、
削除していたため、「EXISTS」に踏み切れませんでした。。。

INが複数の列との比較にも使えるとは今回初めて
知りました。
ご丁寧なアドバイスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)