2016-12-29 51 views
0

這是我認爲是一個相當常見的模式,但我只是努力與它適當的查詢。三種方式加入鏈接表

User Table 
id 

Member table 
id 
name 

User Member link table 
user_id 
member_id 

用戶可能存在於用戶的表中,但用戶成員鏈接表中沒有一行。

我想選擇用戶表的所有行,並且用戶鏈接到用戶成員鏈接表中的成員以顯示從成員錶鏈接到他們的列。

下面是我得到了什麼,但它只是從用戶獲取錶鏈接行:

SELECT user.id, user.username, member.id, member.name 
FROM users 
LEFT JOIN user_member ON user.id = user_member.user_id 
JOIN member ON user_member.member_id = member.id; 

我應該得到的東西是這樣的:

user.id user.username member.id member.name 
1   bob    null  null 
2   alice   10   Alice 
3   jane   11   Jane 
4   joe    null  null 

有什麼建議?

+0

你爲什麼用'左JOIN'一加入,而不是其他? –

+0

那麼,如果我使用LEFT JOIN進行第二次連接,我會從USER獲取所有行,但是在有匹配成員的位置,會出現重複行。 –

+0

您能提供您期望的輸出樣本嗎?另外,如果用戶擁有很多成員,則無法避免出現重複的用戶數據 – Alex

回答

1

我假設user_member表中的member_id在member表中總是有相應的行。 第一個,加入memberuser_member,加入user

SELECT user.id, user.username, member.id, member.name 
FROM users 
LEFT JOIN 
(user_member INNER JOIN member ON user_member.member_id = member.id) 
ON user.id = user_member.user_id; 
1

嘗試使用CROSS JOIN

SELECT user.id, user.username, member.id, member.name 
    FROM users u 
     CROSS JOIN member m 
     LEFT JOIN user_member um 
      ON u.id= um.user_id 
       AND m.id= um.member_id