Как отобразить два столбца в запросе соединения, которые отображаются на один и тот же столбец во второй таблице - PullRequest
3 голосов
/ 29 июня 2010

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

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

Таблица T2

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

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

Ex:

Получатель отправителя

Sender1       receiver1
              receiver2

Sender2       receiver1

Ответы [ 2 ]

5 голосов
/ 29 июня 2010
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
4 голосов
/ 29 июня 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...