首页 > 解决方案 > 在另一个表 SQL 上选择多个匹配项

问题描述

我有这 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

标签: sqlsql-serverstringaggregate-functionslateral-join

解决方案


一种选择使用横向连接和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即可获得您想要的结果。


推荐阅读