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

解決済みの質問

LEFT JOINが2つあるSQL文でANDの意味

■下記SQL文の意味を教えてください

SELECT a.*, b.being_name
FROM alive a
 LEFT JOIN being b ON a.hoge_id = b.id
 LEFT JOIN call c ON c.call_id = a.hoge_id
  AND f.hoge_id = 12
 WHERE f.hoge_id = 12 OR b.id = 12

※12の部分は動的に切り替わります

・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
・左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?

>SELECT フィールド名 FROM テーブル名 WHERE 条件式1 AND 条件式2
>「AND」は2つの条件式の論理積
・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか? それともこのSQLの「AND」は違う使い方をしているのでしょうか? 何か、LEFT JOINに関係しているのでしょうか?

投稿日時 - 2011-11-08 09:06:43

QNo.7120430

暇なときに回答ください

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

>・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
はいそうです。

>左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?
はいそうです。(alive→beingって言うような意味です。)

>・上記内容をネットで見かけたのですが、「AND」は、「WHERE」の前に来てもいいのでしょうか?
「AND]は「WHERE」にかかっているのではなく「LEFT 」の結合の条件となります。
SELECT a.*, b.being_name
FROM alive a
LEFT JOIN being b ON a.hoge_id = b.id
LEFT JOIN call c ON (c.call_id = a.hoge_id AND f.hoge_id = 12)
WHERE f.hoge_id = 12 OR b.id = 12

<<追記>>
このSQLにはfというテーブルが存在しないのでエラーとなります。

投稿日時 - 2011-11-08 09:36:53

お礼

回答ありがとうございました。
大変参考になりましたー

>LEFT JOIN call c ON (c.call_id = a.hoge_id AND f.hoge_id = 12)
かっこで括っていただいので、分かりやすかったです

>このSQLにはfというテーブルが存在しないのでエラーとなります。
失礼しました。こちらは、書き写し間違いでした

投稿日時 - 2011-11-08 19:14:47

ANo.1

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

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

回答(2)

ANo.2

>・LEFT JOINが2つあるので、3つのテーブルを結合しているのでしょうか?
その通りです、alive、being、callの3つのテーブルを結合しています。
>左テーブルは「alive a」で、この右側に2つのテーブルが結合している、という認識でよいでしょうか?
そのように解釈されて問題無いと思います。
>「AND」は、「WHERE」の前に来てもいいのでしょうか?
WHERE以降のANDは結合後のテーブルに対する条件です、WHEREの前に来ると、最後のLEFT JOIN ON側の条件になるので、意味が異なります。

投稿日時 - 2011-11-08 09:44:02

お礼

回答ありがとうございました

>WHERE以降のANDは結合後のテーブルに対する条件です、WHEREの前に来ると、最後のLEFT JOIN ON側の条件になるので、意味が異なります
なるほど。ANDの使い方には、色々あったんですね。
どうして、こんなところ(WHEREの前)に、ANDがあるのか分からなかったのですが、
おかげで疑問が解決しましたー

投稿日時 - 2011-11-08 19:21:21

あなたにオススメの質問