- 締切済み
サブクエリを利用したSQL文から複数の抽出条件
例えば、以下のようなサブクエリを利用したSQL文があります。 SELECT table_a.* FROM table_a LEFT JOIN (SELECT table_b.* FROM table_b LEFT JOIN table_c ON (table_b.id = table_c.bid) WHERE table_b.type='1') AS tbl ON (table_a.id = tbl.aid) このSQL文にWHERE句で条件を指定したいのですが、サブクエリで指定しているtblテーブルのvalueフィールドが「1」と「20」のものを抽出したいと思います。 WHERE (tbl.value='1' AND tbl.value='20') としても結果が帰って来ません。 これは、WHEREする条件の数だけ、サブクエリでテーブルを作って条件を指定するのでしょうか? 効率が悪そうなので、他の方法があるのではと思いご質問させて頂きました。 お分かりになる方がいれば、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
tbl.valueって、table_bに入ってるvalueカラムですよね。 補足でこういってますが >「1」と「20」の両方のレコードがあるものを抽出でした。m(_ _)m その1と20はどこに格納されてるんですか?それが答えだと思うんですが それとも、valueという名のカラムが二つあるってことですか? あるとすれば、table_cかなと思ったけど、table_c選択してないし・・・??? あと、休憩時間中に答えたんでまともに見てなかったのですが SELECT table_b.* FROM table_b LEFT JOIN table_c ON (table_b.id = table_c.bid) WHERE table_b.type='1' ここのJoinする意味は?table_bのtype=1のものだけで選択してるのもtable_bの全カラムですよね table_cの意味はなんですか? Innerとかならまだわかりますが、Leftの意味ってなんですか?
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
>WHERE (tbl.value='1' AND tbl.value='20') >としても結果が帰って来ません。 そりゃそうでしょう。 1つのフィールドで「1であると同時に20である」と言う条件は、絶対に成り立ちません。 「AND」じゃなくて「OR」ですよ。
補足
すみません、間違えました。 「1」と「20」の両方のレコードがあるものを抽出でした。m(_ _)m
>valueフィールドが「1」と「20」 1または20のものを取得ですからor条件では・・・ valueカラムは1レコードに1つしかないんですよね?
補足
すみません、間違えました。 「1」と「20」の両方のレコードがあるものを抽出でした。m(_ _)m
お礼
例題をなるべく現状のものに合わせようとしてちょっと複雑になってしまったようです。 もう少し整理して改めて質問を新たに出してみます。 有難うございました。