プロが教える店舗&オフィスのセキュリティ対策術

■下記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に関係しているのでしょうか?

A 回答 (2件)

>・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というテーブルが存在しないのでエラーとなります。
    • good
    • 1
この回答へのお礼

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

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

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

お礼日時:2011/11/08 19:14

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


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

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

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

お礼日時:2011/11/08 19:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!