• ベストアンサー

条件が複数行にわたる検索

下のようなテーブル構成の場合に、[tbl1_tbl2テーブル]の検索で 「tbl2_idカラムが1と2両方を保持する行のtbl1_id」を取得(この場合だと1と3を取得)したい のですが、どのようにSQLを記述すれば良いのでしょうか? [tbl1テーブル] id 1 2 3 [tbl2テーブル] id 1 2 3 [tbl1_tbl2テーブル] tbl1_id tbl2_id 1     1 1     2 3     1 3     2 2     1

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

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

いまいち例がわるいのでこうしておきます create table tbl1_tbl2(tbl1_id int,tbl2_id int); insert into tbl1_tbl2 values(1,1),(1,2),(1,2),(3,1),(3,2),(3,3),(2,1),(2,3); ここから命題の >「tbl2_idカラムが1と2両方を保持する行のtbl1_id」を取得 を得るのであれば select tbl1_id from tbl1_tbl2 where tbl2_id in (1,2) group by tbl1_id having count(distinct tbl2_id)=2;

takagoo100
質問者

お礼

ご回答ありがとうございます。 そのやり方でできました。 ありがとうございます。

その他の回答 (1)

  • PXU10652
  • ベストアンサー率38% (777/1993)
回答No.1

『「tbl2_idカラムが1と2両方を保持する行のtbl1_id取得」(この場合だと1と3を取得)』すると言う意味がわかりません。tbl1_tbl2テーブルで、tbl2_idは1か2なので、両方を保持ではなくどちらかの値であれば、「SELECT tbl1_id FROM tbl1_tbl2テーブル WHERE (tbl2_id=1 OR tbl2_id=2)」ですが、結局すべての行が選択されるだけです。  tbl1_tbl2テーブルをtbl1テーブルとtbl2テーブルからどのように作成するのか、その上で、どのようなレコードを抽出したいのか、補足をお願いします。

takagoo100
質問者

お礼

ご回答ありがとうございます。 すいません、たしかに分かりずらかったですね・・・ [tbl1_tbl2テーブル]のtbl1_idとtbl2_idは それぞれ[tbl1テーブル]のidカラムと[tbl2テーブル]のidカラムを 外部キーとして設定したカラムです。 レコードの抽出の仕方はORだとたしかにすべての行が選択されてしまうのですが、 そうではなくてANDで抽出したいのです。

関連するQ&A