• ベストアンサー

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

ある条件を含まないというクエリがうまく書けません。 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; なにが良い方法があればご教授下さい。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっと考え方が難しいかもしれませんが以下のようになります。 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

karace
質問者

お礼

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

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.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);

karace
質問者

お礼

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

関連するQ&A