问题描述
我有这3张桌子 表1:
id_Table1 field_table1_1 field_table1_2
1 A B
2 C D
3 E F
表1:
id_Table2 field_table2_1 field_table2_2
4 G H
5 I J
列表项
表3:
id_Table3 id_Table1 id_Table2
1 1 4
2 1 5
3 2 5
所以表3保留了表1和表2之间的关系。
我想做的是查询,获取表1中的所有字段,再加上一个额外的字段,其中包含表2的所有ID(以逗号分隔)。
所以结果应该是这样的:
id_Table1 field_table1_1 field_table1_2 id_Table2
1 A B 4,5
2 C D 5
3 E F
解决方法
一个选项使用横向联接和string_agg()
:
select t1.*,x.*
from table1 t1
outer apply (
select string_agg(t3.id_table2) id_table2
from table3 t3
where t3.id_table1 = t1.id_table1
) x
无需携带table2
即可获得所需的结果。