【问题标题】:MYSQL | How to Join two tables to get the Distinct rows?MYSQL |如何连接两个表以获得不同的行?
【发布时间】:2018-07-20 15:08:36
【问题描述】:
Skills:                       user_skills:

+-------------------------+   +--------------------------------+
| UID | Skill                 | UID | user_id | skill_id
---------------------------   +---------------------------------
|  1  | C++                   |  1  |    34   |     1
|  2  | C#                    |  2  |    34   |     2
|  3  | Python   

我的预期输出是:

+----------------------------------+
| ID(Skill ID from Skills) | Skill               
------------------------------------
| 3                        | Python     

我只想要用户 34 没有的技能。

当前获取用户所拥有的技能我正在使用:

SELECT ss. * 
FROM skills AS s
LEFT JOIN user_skills AS us ON s.UID = us.skill_id
WHERE us.user_id = 34

但我似乎无法理解逻辑以得到相反的结果。因为当每个用户有多个技能时,这不起作用。

SELECT s. * 
FROM skills AS s
LEFT JOIN user_skills AS us ON s.UID != us.skill_id
WHERE us.user_id = 34

【问题讨论】:

    标签: mysql sql select join left-join


    【解决方案1】:
    SELECT ss. * 
    FROM skills AS s
    LEFT JOIN user_skills AS us ON s.UID = us.skill_id and 
    us.user =34
    WHERE us.user_id is null
    

    您正在寻找加入发生的时间。该用户不存在

    所以用户在哪里为空

    【讨论】:

      【解决方案2】:

      not exists 运算符更适合此要求:

      SELECT *
      FROM   skills s
      WHERE  NOT EXISTS (SELECT *
                         FROM   user_skills us
                         WHERE  us.skill_id = s.uid AND
                                us.user_id = 34)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-26
        • 2015-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-14
        • 2021-02-24
        • 1970-01-01
        相关资源
        最近更新 更多