簡體   English   中英

MySQL連接,左連接

[英]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_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)

您需要將聯接的列添加到您的選擇-列

您在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM