- PR -

『テーブルAに存在して、テーブルBに存在しない』と言うSQL文

1
投稿者投稿内容
未記入
会議室デビュー日: 2008/02/04
投稿数: 1
投稿日時: 2008-02-04 00:42
初めて質問をさせて頂きます。
DBはOracleを使用しています。

SQL文のselectで、

テーブルMの列aにより
テーブルAには存在しないで
テーブルBには存在するデータをselectする。

という文は、どのように書けば宜しいでしょうか?
どなたかご指導お願い致します。
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2008-02-04 01:07
お疲れ様です。

内容から察するに、差集合を行いたいという意味でよいでしょうか?


SELECT
*
FROM
B,
M
WHERE
M.A = B.TAISYO
MINUS
SELECT
*
FROM
A,
M
WHERE
M.A = A.TAISYO

もしくは、テーブルBをテーブルMとくっつけて条件に合う物を取った後に、NOTで、テーブルAのコード化何かが有ればそれをはじくようにするという方法もあります。
(NOTを使うと遅くなると思います)

テーブルAとテーブルBのどの項目がテーブルMと同じなのかがわからなかったので、
とりあえずTAISYOという名前にしています。

ポイントは、テーブルBで、条件に合う物をすべて出し、その下にテーブルAで条件に当てはまる物を出して、MINUS句を利用し、テーブルAとテーブルBで同じデータを削いだ結果を出すという点です。

これがご希望の考えで間違いないですか?
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-02-04 01:28
引用:

未記入さんの書き込み (2008-02-04 00:42) より:
SQL文のselectで、

テーブルMの列aにより
テーブルAには存在しないで
テーブルBには存在するデータをselectする。

という文は、どのように書けば宜しいでしょうか?


老婆心ながら、お題を出されるときは、列名や行などもなるべく具体例を出されたほうが良いと思います。
私は「テーブルMの列aにより」がどういう構成か良く分かりませんでした。

コード:
select * from B where not exists (select * from A where A.a = B.a and A.a = 「テーブルMの列aにより」)



みたいな感じ?もしかしたら、ちょっと間違っているかもしれませんが、なんにせよ not exists を使うのが自然だろうと思います。
1

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