2016-07-31 251 views
0

我有2個表 的用戶被分配給1組的基團可以具有多於1個用戶MySQL的左連接(1對多的關係)

表6個用戶(ID,姓名,組ID) 除1,所有用戶都被分配給一組 表b 4組(ID,組名)

我想列出各組中的所有組和用戶即使沒有用戶被分配

SELECT groups.Group_ID, groups.Group_name, 
     Group_concat(users.User_ID order by User_ID) AS assigned 
FROM groups 
LEFT JOIN users 
    ON groups.Group_ID = users.GroupID 
GROUP BY groups.Group_ID 

這隻返回grou的列表PS。

+0

您可以添加SELECT用戶*,...在你查詢 –

+0

爲什麼LEFT JOIN,而不是FULL OUTTER JOIN? –

+0

@OmidCompSCI如果你不得不問,MySQL可能不適合你。 – Strawberry

回答

0

我敢肯定,你的問題是,如果在一個列中的組ids存儲列表。您應該修復您的數據結構並擁有UserGroups表,每個用戶一行,每個組一個。

有時,我們堅持其他人的真正糟糕的設計決定。在這種情況下,你可以使用find_in_set()

On find_in_set(g.groupid, u.groupids) > 0 
0

如果在結果集中的assigned列中除NULL值之外什麼都沒有,那麼證明您的ON groups.Group_ID = users.GroupID條件永遠不會得到滿足。

您可能應該檢查表格的內容,看看您在ON條件下使用的ID列是否按照您認爲的方式工作。

此外,請注意您正在使用nonstandard MySQL extension to GROUP BY。這有時會造成混淆。嘗試GROUP BY groups.Group_ID, groups.Group_name,看看你的結果是否有所改善。

0
SELECT groups.Group_ID, groups.Group_name, group_concat(users.User_ID order by user_ID) AS assigned FROM groups, users where groups.Group_ID = users.User_ID OR groups.Group_ID not in ((select users.User_ID from users)) GROUP BY groups.Group_ID, groups.Group_name; 

| GroupId | GroupName | assigned | 
+---------+-----------+-----------+ 
|  1 | a   | 1   | 
|  2 | b   | 2,3,4,5 | 
|  3 | c   | 1,2,3,4,5 | 

如果到組「一」被分配唯一的用戶1,到組「B」分配所有其他用戶,沒有用戶屬於組「C」,那麼你需要做的就是這個

|  3 | c   | null | 

的而不是

|  3 | c   | 1,2,3,4,5 |