dポイントプレゼントキャンペーン実施中!

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

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;


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

A 回答 (2件)

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



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/21 13:09

副問合せが使えるバージョンなら


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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/21 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!