【问题标题】:MySql Query: Logical constructionMySql 查询:逻辑构造
【发布时间】:2018-07-14 13:52:21
【问题描述】:

我是 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)

基本上,我想要一个未加入 id 5 组的用户的 user_id(每个用户可以加入多个组,但只能加入一次。每个组可以有多个用户)。 所以像这样......

选择 users.user_id
FROM 用户,user_group_link
其中 users.user_id 不在(
UNION SELECT user_group_link.user_id, user_group_link.group_id
WHERE user_group_link.group_id = 5)

希望这可以解释我要选择的内容。 如果有人可以帮助我构建此查询,我将不胜感激。 我在这里停留了大约 2 天,我真的不知道谷歌是做什么的。我注意到 UNION SELECT 或 INNER JOIN 适合我。

【问题讨论】:

  • 删除子查询中的 UNION 词 ...

标签: mysql


【解决方案1】:

基本上,该方法是查找user_group_link 中所有可用的user_id,然后检查users 中的哪个user_id 表在user_group_link 的id 列表中不可用。

一种选择可能是:

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】:

    我想要一个未加入 id 为 5 组的用户的 user_id

    “我想要所有未链接到组 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)
    

    【讨论】:

      【解决方案3】:

      使用 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 表中选择除这些 id(第 5 组中用户的 id)之外的所有 user_id。

      【讨论】:

        猜你喜欢
        • 2015-07-12
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-08
        • 2020-12-20
        相关资源
        最近更新 更多