こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

サブクエリを利用した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する条件の数だけ、サブクエリでテーブルを作って条件を指定するのでしょうか?
効率が悪そうなので、他の方法があるのではと思いご質問させて頂きました。

お分かりになる方がいれば、よろしくお願いします。

投稿日時 - 2013-11-27 15:00:10

QNo.8363994

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(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の意味ってなんですか?

投稿日時 - 2013-11-27 21:12:21

お礼

例題をなるべく現状のものに合わせようとしてちょっと複雑になってしまったようです。

もう少し整理して改めて質問を新たに出してみます。
有難うございました。

投稿日時 - 2013-11-28 09:12:29

ANo.2

>WHERE (tbl.value='1' AND tbl.value='20')
>としても結果が帰って来ません。

そりゃそうでしょう。

1つのフィールドで「1であると同時に20である」と言う条件は、絶対に成り立ちません。

「AND」じゃなくて「OR」ですよ。

投稿日時 - 2013-11-27 15:22:06

補足

すみません、間違えました。
「1」と「20」の両方のレコードがあるものを抽出でした。m(_ _)m

投稿日時 - 2013-11-27 16:42:54

>valueフィールドが「1」と「20」
1または20のものを取得ですからor条件では・・・
valueカラムは1レコードに1つしかないんですよね?

投稿日時 - 2013-11-27 15:13:22

補足

すみません、間違えました。
「1」と「20」の両方のレコードがあるものを抽出でした。m(_ _)m

投稿日時 - 2013-11-27 16:42:40

あなたにオススメの質問