所以我试图用一个简单的连接编写一个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
第二个是分数表,现在它只有一行,
id student_id item_id score
------------------------------
1 1 1 20
第三个表中包含一个项目列表,但这个特定查询并不是真正需要的。
我想拉出所有的学生以及得分.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
在我看来,这应该有效,它应该拉动所有学生,即使没有得分,因为它是左连接,但它只是拉着一个学生得分Eric Larsen,结果看起来像
Eric, Larsen, 20
但不应该是:
first_name last_name score
----------------------------
Eric Larsen 20
Sam Coons NULL
David Brown NULL
Richard Brown NULL
Kendra Griffiths NULL
答案 0 :(得分: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_id
为NULL
,因此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)
答案 1 :(得分:0)
您需要将已加入的列添加到您的选择列
答案 2 :(得分:0)
您在SQL查询中使用的where子句将结果集限制为一行。尝试删除where子句。
SELECT students.first_name, students.last_name, scores.score
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;
答案 3 :(得分:0)
您提供了一个where条件来过滤掉记录,删除那些条件,你应该得到你想要的结果。