2010-12-10 49 views
2

我有以下表中的MySQL:左連接多個表質疑

用戶 輪廓 率

在用戶表,我有如下記載:

 
id: 1 
name: John 
status: active 

在輪廓,我有以下內容:

 
id: 5 
bio: blah blah blah 
user_id: 1 

表格率是空的,但包含以下字段:

id, rate, and user_id

我試圖使用SQL查詢這些表並顯示用戶,其用戶配置文件信息(如果有的話),和他們的利率(如果存在的話)。我使用的SQL如下:

SELECT user.name, profile.bio, rate.rate 
FROM user 
LEFT JOIN (profile, rate) ON (user.id = profile.user_id AND user.id = rate.user_id) 
WHERE status = 'active'; 

的這裏的問題是,上面的SQL返回user.name數據,但profile.bio爲null即使是在配置表中的匹配記錄的user_id。似乎MySQL如果在費率表中沒有該用戶的匹配記錄,則不會顯示生物數據。

如果我希望SQL顯示用戶的名字以及他們的生物和小時費率(如果任何一個存在),我該如何去做?我有點困惑,因爲我認爲上面的SQL應該工作。

謝謝!

回答

2
SELECT user.name, profile.bio, rate.rate 
FROM user 
LEFT JOIN profile ON user.id = profile.user_id 
LEFT JOIN rate ON user.id = rate.user_id 
WHERE status = 'active' 

你試圖結合LEFT JOIN邏輯,如果您的兩個條件是真實的它只是連接(user.id = profile.user_id AND user.id = rate.user_id)。

2

我不熟悉的做多加入一個條款,所以我會TR分裂的加入,就像這樣:

SELECT user.name, profile.bio, rate.rate 
FROM user 
LEFT JOIN profile ON user.id = profile.user_id 
LEFT JOIN rate ON user.id = rate.user_id 
WHERE status = 'active'; 
0

你的原代碼執行左連接上user表由profilerate交叉連接產生的表格。

兩個表的交叉連接是兩個表的笛卡爾乘積。具體而言,它不會產生而不是產生的行只來自一個表。因此,當此交叉連接表與userwhere子句保持連接時,您看不到所需的結果。

爲了達到您想要的效果,您需要多次左連接。