0

したがって、2つの異なるテーブルから物事をプルするための単純な結合を使用してMySQLクエリを作成しようとしています。

最初のテーブルは学生のテーブルです(申し訳ありませんが、それらを入れるためのより良い方法を見つけることができませんでした)

id  first_name  last_name   major    phone_number
-------------------------------------------------
1   Eric        Larsen      CS       1234567891
2   Sam         Coons       English  1234567891
3   David       Brown       MAE      1234567891
4   Richard     Brown       CS       1234567891
5   Kendra      Griffiths   FCHD     1234567891

2つ目はスコアテーブルで、1行だけでリッチになりました。

id  student_id  item_id  score
------------------------------
1   1           1        20

アイテムのリストを含む3番目のテーブルがありますが、この特定のクエリには実際には必要ありません。

スコアのスコアとともにすべての学生をプルしたいと思います。スコアがある場合はitem_id=1ですが、そうでない場合でも、学生の情報をプルしたいのですが、少なくとも名前はあります。

これが私が書いたクエリです。

SELECT students.first_name, students.last_name, scores.score
FROM students
     LEFT JOIN scores
     ON students.id = scores.student_id
WHERE scores.item_id =1

私の考えでは、これはうまくいくはずです。左の結合であるため、スコアがなくてもすべての生徒を引っ張るはずですが、スコアが1人の生徒だけを引っ張っています。EricLarsen、結果は次のようになります。

Eric, Larsen, 20

しかし、そうであるべきではありません:

first_name  last_name  score
----------------------------
Eric        Larsen     20
Sam         Coons      NULL
David       Brown      NULL
Richard     Brown      NULL
Kendra      Griffiths  NULL

4

4 に答える 4

1

このクエリはあなたの問題を明らかにします。

SELECT students.first_name, students.last_name, scores.score, scores.item_id
    FROM students
    LEFT JOIN scores
        ON students.id = scores.student_id

表示されるのscores.item_idNULL他のすべての行に対するものであるため、WHERE scores.item_id = 1句は失敗します。したがって、これらの行は結果に表示されません。

これはあなたが求めている結果を得るはずです

SELECT students.first_name, students.last_name, scores.score
    FROM students
    LEFT JOIN scores
        ON (students.id = scores.student_id)
    WHERE (scores.item_id = 1 OR scores.item_id IS NULL)

また

SELECT students.first_name, students.last_name, scores.score
    FROM students
    LEFT JOIN scores
        ON (students.id = scores.student_id AND scores.item_id = 1)
于 2012-11-26T10:05:21.447 に答える
0

結合された列をselect-columnsに追加する必要があります

于 2012-11-26T09:57:08.430 に答える
0

SQLクエリに設定したwhere句により、結果セットが1行に制限されます。where句を削除してみてください。

SELECT students.first_name, students.last_name, scores.score
    FROM students
    LEFT JOIN scores
        ON students.id = scores.student_id;
于 2012-11-26T09:58:19.117 に答える
0

レコードをフィルターで除外するwhere条件を指定したので、目的の結果が得られるはずのwhere条件を削除します。

于 2012-11-26T10:06:10.400 に答える