Как отобразить два столбца в запросе на соединение, которые сопоставляются с одним и тем же столбцом во второй таблице

У меня есть таблица T1 со следующими столбцами

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

Таблица Т2

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

Я хочу объединить две таблицы таким образом, чтобы сгруппировать отправителя и соответствующего получателя. Мне нужны имена вместо идентификаторов. Как это можно сделать в одном SQL-запросе

Ex:

Отправитель-получатель

Sender1       receiver1
              receiver2

Sender2       receiver1

person Vaishak Suresh    schedule 29.06.2010    source источник


Ответы (2)


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 и иметь имена получателей в одном столбце (разделенные \n, пробелом или чем-то еще), используйте группу на 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
person Konerak    schedule 29.06.2010

Просто присоединитесь к 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]
person Chris Latta    schedule 29.06.2010