MySql查询:逻辑构造

时间:2018-02-04 16:11:10

标签: mysql

我是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适合我。

3 个答案:

答案 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)。