如何编写SQL实现主表每行匹配次表结果并拼接输出?
实现方案与可行性说明
完全可以实现需求,以下是具体的SQL查询方案:
思路
先分别筛选主表、次表中符合W=100 AND H=500 AND D=300条件的记录,给主表的每条符合记录分配唯一分组ID,再将次表的符合记录与主表的每个分组ID做关联,最后通过分组ID+排序标记来控制输出顺序,确保主表每条记录后紧跟所有次表符合记录。
具体SQL代码
WITH filtered_primary AS ( SELECT Name, W, H, D, ROW_NUMBER() OVER (ORDER BY Name) AS group_id, 1 AS sort_order FROM primary_table WHERE W = 100 AND H = 500 AND D = 300 ), filtered_secondary AS ( SELECT s.Name, s.W, s.H, s.D, p.group_id, 2 AS sort_order FROM secondary_table s CROSS JOIN filtered_primary p WHERE s.W = 100 AND s.H = 500 AND s.D = 300 ) SELECT Name, W, H, D FROM ( SELECT Name, W, H, D, group_id, sort_order FROM filtered_primary UNION ALL SELECT Name, W, H, D, group_id, sort_order FROM filtered_secondary ) combined ORDER BY group_id, sort_order;
代码解释
filtered_primaryCTE:筛选主表符合条件的记录,用ROW_NUMBER()生成唯一的group_id用来分组,sort_order=1确保主表记录在同组内排在最前面。filtered_secondaryCTE:筛选次表符合条件的记录,通过CROSS JOIN关联主表的筛选结果,让次表的每条符合记录对应主表的每个分组ID,sort_order=2标记为次表记录,排在主表之后。- 合并与排序:将两个CTE的结果合并,按
group_id分组排序,同组内按sort_order排序,最终得到主表每条符合记录后紧跟所有次表符合记录的结果。
内容的提问来源于stack exchange,提问作者user23025019
相关产品推荐
相关产品推荐

