我有2张桌子 用户被分配到1个组,一个组可以有多个用户
表6个用户(ID,Name,GroupID) 除1外,所有用户都被分配到一个组 表b 4组(ID,GroupName)
我想列出所有群组和每个群组中的用户,即使没有分配用户
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
这只返回组列表。
答案 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
,看看您的搜索结果是否有所提升。
答案 1 :(得分: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 |
如果要为组'a'分配仅用户1,则为组'b'分配所有其他用户,并且没有用户属于组'c',那么您需要做什么才能获得此
| 3 | c | null |
而不是那个
| 3 | c | 1,2,3,4,5 |
答案 2 :(得分:0)
我很确定您的问题是,如果组ID在单个列中,则存储列表。您应修复数据结构并拥有UserGroups
表,每个用户一行,每组一个。
有时,我们会遇到其他人非常糟糕的设计决策。在这种情况下,您可以使用find_in_set()
:
On find_in_set(g.groupid, u.groupids) > 0