表:ID
,Person_ID
,Name
每个Person ID
可以有多行,因为他可以有多个名字(名字,姓氏,昵称等等)。
我有另一张表,每人包含一行,其中包含其他一些数据
我希望将每个表连接成每行1行,并在最后一列中将所有人名聚合成一个字符串,如下所示:" Thomas,anderson,neo"
这样的事情:
SELECT A.*,
B.PERSON_ID,
B.(aggregated names here)
FROM USERS A, USERS_NAMES B;
我该怎么做?
答案 0 :(得分:3)
我会用以下方式做到这一点:
select u.*, un.names
from users u left outer join
(select un.person_id, listagg(un.name, ',') within group (order by un.id) as names
from users_names un
group by un.person_id
) un
on u.person_id = un.person_id;
请注意,列表聚合正在子查询中完成。这允许在外部查询中使用u.*
而不进行聚合。否则,您必须group by
明确users
中的每一列。{/ p>