How to display two columns in a join query that map to one column in a second table

I have a table T1 with the following columns

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

Table T2

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

I want to join the two tables so that I want the sender and the corresponding receiver to be grouped. I need names instead of identifiers. How can this be done in a single SQL query

Example:

Sender receiver

Sender1       receiver1
              receiver2

Sender2       receiver1
+3
source share
2 answers
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

You'll get:

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
+5

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]
+4

Source: https://habr.com/ru/post/1752221/


All Articles