我试图让我的头绕着这个查询,但其中一个记录仍然不断弹出。总而言之,我的目的是向左侧展示群组成员,并从右侧的群组中包含而不是的电话簿中的姓名。这样用户可以选择它们并将它们添加到组中。MySQL:让所有的用户不是群组的一部分
user_id firstname group_id grpname
------- --------- -------- ----------
1 Luker 3 Abc
2 John 1 Some Group
3 Sam 2 Awesome Group
4 Mitch 1 Some Group
4 Mitch 2 Awesome Group
5 Rocky (NULL) (NULL)
6 Pops (NULL) (NULL)
的唯一的事情是,如果一个用户是多个组(USER_ID 4)的一部分,他们的名字不应该在电话簿显示在所有因为它已经被放置在现有的名单成员。
-- Query for group_id 2
SELECT user.id user_id, user.firstname, grp.id group_id, grp.grpname FROM agi_user user
LEFT JOIN agi_group_user gu ON user.id = gu.user_id
LEFT JOIN agi_groups grp ON gu.group_id = grp.id
WHERE grp.id IS NULL OR grp.id != 2
GROUP BY user.id
但出于某种原因,用户米奇仍不断弹出。
user_id firstname group_id grpname
------- --------- -------- ----------
1 Luker 3 Abc
2 John 1 Some Group
4 Mitch 1 Some Group
5 Rocky (NULL) (NULL)
6 Paps (NULL) (NULL)
编辑::我需要的输出是
user_id firstname group_id grpname
------- --------- -------- ----------
1 Luker 3 Abc
2 John 1 Some Group
5 Rocky (NULL) (NULL)
6 Paps (NULL) (NULL)
基本上,我想所有的用户不是组包括NULL的一部分。但是因为一个用户是多个组的一部分,所以她的记录不应该出现,因为其他组可能具有3或4的group_id(或除2之外的其他任何组)。
这是完美的。你的第二个查询按计划进行,我从来没有想过要自行加入。谢谢! – enchance