代码之家  ›  专栏  ›  技术社区  ›  Vaishak Suresh

如何在联接查询中显示映射到第二个表中同一列的两列

  •  3
  • Vaishak Suresh  · 技术社区  · 14 年前

    我有一个包含以下列的表T1

    T1
    ----------
    ID | Name
    ----------
    1    Sender1
    2    Receiver1
    3    Receiver2
    4    Sender2
    

    表T2

    T1
    ---------------------
    SenderID | ReceiverID
    ---------------------
    1          2
    1          3
    4          2
    

    前任:

    Sender1       receiver1
                  receiver2
    
    Sender2       receiver1
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   Konerak    14 年前
    select a.name Sender, b.name Receiver
    FROM t2
    INNER JOIN t1 a
    ON t2.SenderID = a.ID
    INNER JOIN t1 b
    ON t2.Receiver = b.ID
    

    将为您提供:

    SenderID ReceiverID
    Sender1 Receiver1
    Sender1 Receiver2
    Sender2 Receiver1
    

    如果要在Sender1上对这些结果进行分组,并将接收方名称放在一列中(用空格或其他分隔符分隔),请在上使用group by a.name . 例如在MySQL中,有一个 group_concat 对于 b.name 的。

    select a.name Sender, GROUP_CONCAT(b.name SEPARATOR ' ') Receiver
    FROM t2
    INNER JOIN t1 a
    ON t2.SenderID = a.ID
    INNER JOIN t1 b
    ON t2.Receiver = b.ID
    GROUP BY a.name
    
        2
  •  4
  •   Chris Latta    14 年前

    只需在T1上连接两次:

    SELECT TS.[Name] AS SenderName, TR.[Name] AS ReceiverName
    FROM T2
        INNER JOIN T1 TS ON TS.ID = T2.SenderID
        INNER JOIN T1 TR ON TR.ID = T2.ReceiverID
    ORDER BY TS.[Name], TR.[Name]