【问题标题】:mySQL query to gather 2 ids and match them to 2 names per rowmySQL 查询以收集 2 个 id 并将它们与每行 2 个名称匹配
【发布时间】:2022-01-16 20:37:08
【问题描述】:

大家好,我有一个 SQL 查询问题,我一直在尝试解决一些问题,但无法提出正确的查询来执行它。

我想要做的是查看 2 个表。每个表都有一个相互匹配的唯一 ID,然后是与该 ID 关联的名称。但是,OtherTbl两个 ID 在同一记录中,而不是像 UserTbl 中那样分开。 p>

用户表:

id | mID   | name
---|-------|-------------
5  | 12345 | Bob Barker
6  | 54688 | Steve Jobs
7  | 56999 | Adam Sandler
9  | 53166 | Bill Gates
11 | 87540 | MC Hammer

其他表:

id | leftID | rightID
---------------------
8  | 54688  | 12345
41 | 87540  | 87540
43 | 56999  | 53166

所以我想从上面的 2 个表中得到的是在一起的 2 个用户(leftID 和 rightUD)。输出如下所示:

leftID | rightID | leftName     | rightName
-------|---------|--------------|-----------
54688  | 12345   | Steve Jobs   | Bob Barker
87540  | 87540   | MC Hammer    | MC Hammer
56999  | 53166   | Adam Sandler | Bill Gates

我知道这是可以做到的——我只是想不出办法让它发挥作用!

我尝试了传统的内部连接

SELECT 
    ut.leftID,
    ut.rightID,
    ot.leftName 
FROM 
    OtherTbl as ot
INNER JOIN 
    UserTbl AS ut 
ON
    ot.leftID = ut.mID 

上面的这个查询确实输出了数据,但它不像上面的示例输出那样捆绑在一起。更不用说它留下了右边的用户用户FbID

一位 SQL 专家会很高兴向我展示我缺少什么(或忘记了能够使用)!

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

    您需要使用usertbl 表两次 - 一次用于leftname(别名a1),另一次用于rightname(别名a2)。

    SQL> select b.leftid, b.rightid, a1.name as leftname, a2.name as rightname
      2  from othertbl b join usertbl a1 on a1.mid = b.leftid
      3                  join usertbl a2 on a2.mid = b.rightid;
    
        LEFTID    RIGHTID LEFTNAME     RIGHTNAME
    ---------- ---------- ------------ ------------
         54688      12345 Steve Jobs   Bob Barker
         56999      53166 Adam Sandler Bill Gates
         87540      87540 MC Hammer    MC Hammer
    
    SQL>
    

    【讨论】:

    • 就是@Littlefoot!我知道这是可能的。感谢补充知识! :o)
    • 不客气。
    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多