如何使用其他记录中的值为每个 table 创建一个 Group_Concat 字段
How can I create a Group_Concat field per table using values from other records
假设一个 table 的名字和姓氏,我想为每条记录做一个逗号分隔的亲属列表。
- 第一名 |最后 |亲戚
- 鲍勃 |史密斯 |爱丽丝,安德鲁
- 爱丽丝 |史密斯 |鲍勃,安德鲁
- 安德鲁 |史密斯 |鲍勃,爱丽丝
- 亚历克斯 |琼斯 |安妮,瑞奇
- 安妮 |琼斯 |亚历克斯,瑞奇
- 瑞奇 |琼斯 |亚历克斯、安妮
根据这个 sqlFiddle
http://sqlfiddle.com/#!9/25d80c/1
我知道如何手动 group_contact 任何姓氏,但不清楚如何为每条记录找到匹配姓氏且 运行 相同 group_concat
您可以使用自 LEFT
连接和聚合来完成:
SELECT s1.First, s1.Last,
GROUP_CONCAT(s2.First) Relatives
FROM Surnames s1 LEFT JOIN Surnames s2
ON s2.Last = s1.Last AND s2.First <> s1.First
GROUP BY s1.First, s1.Last;
参见demo。
您可以将聚合放在 lateral join
中,如下所示:
select s.First, s.Last, r.Relatives
from Surnames s,
lateral (
select group_concat(First) Relatives
from Surnames r
where s.Last = r.Last AND s.First != r.First
)r
假设一个 table 的名字和姓氏,我想为每条记录做一个逗号分隔的亲属列表。
- 第一名 |最后 |亲戚
- 鲍勃 |史密斯 |爱丽丝,安德鲁
- 爱丽丝 |史密斯 |鲍勃,安德鲁
- 安德鲁 |史密斯 |鲍勃,爱丽丝
- 亚历克斯 |琼斯 |安妮,瑞奇
- 安妮 |琼斯 |亚历克斯,瑞奇
- 瑞奇 |琼斯 |亚历克斯、安妮
根据这个 sqlFiddle
http://sqlfiddle.com/#!9/25d80c/1
我知道如何手动 group_contact 任何姓氏,但不清楚如何为每条记录找到匹配姓氏且 运行 相同 group_concat
您可以使用自 LEFT
连接和聚合来完成:
SELECT s1.First, s1.Last,
GROUP_CONCAT(s2.First) Relatives
FROM Surnames s1 LEFT JOIN Surnames s2
ON s2.Last = s1.Last AND s2.First <> s1.First
GROUP BY s1.First, s1.Last;
参见demo。
您可以将聚合放在 lateral join
中,如下所示:
select s.First, s.Last, r.Relatives
from Surnames s,
lateral (
select group_concat(First) Relatives
from Surnames r
where s.Last = r.Last AND s.First != r.First
)r