我是MySql的新手,我正在努力查询。
我有3张桌子:
-users
-user_id
-username
-password
-groups
-group_id
-group_name
-user_group_link
-id
-user_id (foreign key of users.user_id)
-group_id (foreign key of groups.group_id)
基本上,我希望一个未加入组的用户的user_id为id 5(每个用户可以加入多个组,但只能加入一次。每个组可以有多个用户)。 所以像这样......
SELECT users.user_id
FROM users,user_group_link
在哪里users.user_id NOT IN(
UNION SELECT user_group_link.user_id,user_group_link.group_id
WHERE user_group_link.group_id = 5)
希望这可以解释我想要选择的内容。 如果有人能帮我构建这个查询,我真的很感激。 我在这里呆了大约2天,我真的不知道谷歌是为了什么。我注意到UNION SELECT或INNER JOIN适合我。
答案 0 :(得分:0)
我希望一个用户的user_id没有加入具有id 5的组
“我想要所有未链接到第5组的用户的ID”:
select user_id
from users u
where not exists (select 1
from user_group_link
where user_id = u.id
and group_id = 5)
答案 1 :(得分:0)
基本上,方法是查找user_id
中可用的所有user_group_link
,然后检查来自user_id
的{{1}} users
表中的user_group_link
}}
一个选项可能是:
SELECT users.user_id
FROM users
WHERE users.user_id NOT IN (SELECT user_group_link.user_id FROM user_group_link
WHERE user_group_link.group_id = 5)
答案 2 :(得分:0)
使用EXCEPT的绝佳机会。
SELECT user_id
FROM users
EXCEPT
SELECT user_id
FROM user_group_link
WHERE group_id = 5
此查询将首先从user_group_link表中选择组5中的所有user_id,然后它将从users表中选择除user ID之外的所有user_ids(组5中用户的ID)。