Select 在 select 内,在另一个 table SQL 上有多个匹配项
Select within select with multiple matches on the other table SQL
我有这 3 个 table
Table1:
id_Table1 field_table1_1 field_table1_2
1 A B
2 C D
3 E F
Table 1:
id_Table2 field_table2_1 field_table2_2
4 G H
5 I J
列表项
Table 3:
id_Table3 id_Table1 id_Table2
1 1 4
2 1 5
3 2 5
所以 table 3 保持 table 1 和 2 之间的关系。
我想做的是通过查询获取 table 1 中的所有字段,再加上一个包含 table 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
也能得到想要的结果
我有这 3 个 table Table1:
id_Table1 field_table1_1 field_table1_2
1 A B
2 C D
3 E F
Table 1:
id_Table2 field_table2_1 field_table2_2
4 G H
5 I J
列表项
Table 3:
id_Table3 id_Table1 id_Table2
1 1 4
2 1 5
3 2 5
所以 table 3 保持 table 1 和 2 之间的关系。
我想做的是通过查询获取 table 1 中的所有字段,再加上一个包含 table 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
也能得到想要的结果