SQL Server:如何用Join返回固定行,即使关联表无匹配行
实现需求的SQL语句方案
要让每个Table1的Col1值都对应Low、Medium、High三个Col2值,哪怕Table2里没有匹配行,核心思路是先生成所有Col1与三个等级的完整组合,再左关联Table2获取对应Col3的值。
具体SQL语句如下:
SELECT t1.[Col 1], levels.[Col 2], t2.[Col 3] FROM Table1 t1 CROSS JOIN (VALUES ('Low'), ('Medium'), ('High')) AS levels([Col 2]) LEFT JOIN Table2 t2 ON t1.[Col 1] = t2.[Col 1] AND levels.[Col 2] = t2.[Col 2] ORDER BY t1.[Col 1], CASE levels.[Col 2] WHEN 'Low' THEN 1 WHEN 'Medium' THEN 2 WHEN 'High' THEN 3 END;
代码说明:
- 构造等级列表:用
VALUES ('Low'), ('Medium'), ('High')生成包含三个固定等级的临时数据集levels - 生成全量组合:通过
CROSS JOIN让Table1的每一行都和三个等级各匹配一次,得到所有需要的Col1+Col2组合 - 左关联获取数据:用
LEFT JOIN关联Table2,匹配条件同时包含Col1和Col2,没有匹配的行Col3会自动显示为NULL - 排序:最后通过
ORDER BY和CASE语句让结果按Col1排序,同时每个Col1下的等级按Low→Medium→High的顺序排列,和预期输出一致
内容的提问来源于stack exchange,提问作者JakeUT
相关产品推荐
相关产品推荐

