- ベストアンサー
条件が複数行にわたる検索
下のようなテーブル構成の場合に、[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
- みんなの回答 (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;
その他の回答 (1)
- PXU10652
- ベストアンサー率38% (777/1993)
『「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テーブルからどのように作成するのか、その上で、どのようなレコードを抽出したいのか、補足をお願いします。
お礼
ご回答ありがとうございます。 すいません、たしかに分かりずらかったですね・・・ [tbl1_tbl2テーブル]のtbl1_idとtbl2_idは それぞれ[tbl1テーブル]のidカラムと[tbl2テーブル]のidカラムを 外部キーとして設定したカラムです。 レコードの抽出の仕方はORだとたしかにすべての行が選択されてしまうのですが、 そうではなくてANDで抽出したいのです。
お礼
ご回答ありがとうございます。 そのやり方でできました。 ありがとうございます。