Vai*_*esh 3 sql join group-by aggregate-functions
我有一个表T1,其中包含以下列
T1
----------
ID | Name
----------
1 Sender1
2 Receiver1
3 Receiver2
4 Sender2
Run Code Online (Sandbox Code Playgroud)
表T2
T1
---------------------
SenderID | ReceiverID
---------------------
1 2
1 3
4 2
Run Code Online (Sandbox Code Playgroud)
我想以这样一种方式加入这两个表,我想让发送者和相应的接收者分组.我想要名称而不是ID.如何在一个SQL查询中完成此操作
例如:
发件人接收人
Sender1 receiver1
receiver2
Sender2 receiver1
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
会给你:
SenderID ReceiverID
Sender1 Receiver1
Sender1 Receiver2
Sender2 Receiver1
Run Code Online (Sandbox Code Playgroud)
如果要在Sender1上对这些结果进行分组,并将接收者名称放在一列中(以\n或空格或其他内容分隔),请使用on on组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
Run Code Online (Sandbox Code Playgroud)