みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ある条件を含まないというクエリがうまく書けません。

ある条件を含まないというクエリがうまく書けません。

test_table
ID,name
-----------
1,aaa
2,bbb
3,ccc
4,ddd
5,eee

test_table2
ID,value
-----------
1,100
1,200
1,300
1,400
2,100
2,200
3,900
3,800
4,400
4,500
4,600
5,100

今まで下記クエリのように、test_tableのIDとtest_table2のIDでジョインして、
test_table2のvalueに"200"を含んでいるtest_tableのレコードを取得していました。

SELECT DISTINCT test_table.*
LEFT JOIN test_table2 ON test_table.ID = test_table2.ID
WHERE test_table2.value = 200;

(test_tableのID:1と2のレコードが返ってきます。)

これを、test_table2のvalueに"200"を含まないものを返すようにしたいのです。
(test_tableのID:3と4と5のレコードを返したい)

下記クエリを作ってみましたが、ID:1と2も返ってきてしまいます。
ID:1のvalueの"100","300","400"、ID:2のvalueの"100"に条件が合ってしまうようです。。

SELECT DISTINCT test_table.*
LEFT JOIN test_table2 ON test_table.ID = test_table2.ID
WHERE test_table2.value != 200;


なにが良い方法があればご教授下さい。

投稿日時 - 2008-09-02 17:22:37

QNo.4298288

困ってます

質問者が選んだベストアンサー

ちょっと考え方が難しいかもしれませんが以下のようになります。

SELECT test_table.*
FROM test_table
LEFT JOIN test_table2 ON test_table.ID = test_table2.ID
and test_table2.value = 200
WHERE 1
and test_table2.value is null

投稿日時 - 2008-09-02 17:57:41

お礼

JOIN条件した結果にWHERE条件で目的の情報を取るってのは考えつきませんでした。
参考になりました。ありがとうございます。

投稿日時 - 2008-09-21 13:09:37

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

副問合せが使えるバージョンなら
SELECT test_table.*
from test_table
WHERE not exists (
select 1 from test_table2
where test_table.ID = test_table2.ID
and test_table2.value = 200);

投稿日時 - 2008-09-03 15:09:04

お礼

参考になりました。ありがとうございます。

投稿日時 - 2008-09-21 13:05:54

あなたにオススメの質問