[英]MySQL joins, left join
因此,我試圖編寫一個具有簡單聯接的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
?
該查詢將揭示您的問題。
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)
您需要將聯接的列添加到您的選擇-列
您在SQL查詢中放置的where子句將結果集限制為一行。 嘗試刪除where子句。
SELECT students.first_name, students.last_name, scores.score
FROM students
LEFT JOIN scores
ON students.id = scores.student_id;
您提供了一個條件過濾條件,以除去記錄,從而刪除了您應該獲得所需結果的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.