为何Right Join无法获取West区域?SQL查询问题求助
问题原因及解决方案
原因分析
你写的查询里,WHERE Distributor = 'ACE'是在RIGHT JOIN执行完成后才做的过滤。由于West区域没有ACE经销商的记录,RIGHT JOIN后这条区域对应的rs.Distributor值是NULL,而NULL和'ACE'不匹配,所以这条记录被WHERE条件直接过滤掉了,导致你看不到West区域。
解决方法
方法一:将过滤条件移至JOIN的ON子句
把Distributor = 'ACE'放到关联条件里,这样在关联阶段就只匹配ACE的记录,RIGHT JOIN会保留CTE中的所有区域,没有ACE的区域对应字段会显示NULL:
WITH cte as ( SELECT distinct region FROM #RegionSales ) SELECT cte.Region, rs.Distributor, rs.Sales FROM #RegionSales as rs RIGHT JOIN cte ON rs.Region = cte.Region AND rs.Distributor = 'ACE'
方法二:改用LEFT JOIN(更直观)
以CTE(包含所有区域)为主表,左关联#RegionSales中ACE的记录,确保所有区域都被保留:
WITH cte as ( SELECT distinct region FROM #RegionSales ) SELECT cte.Region, rs.Distributor, rs.Sales FROM cte LEFT JOIN #RegionSales as rs ON cte.Region = rs.Region AND rs.Distributor = 'ACE'
内容的提问来源于stack exchange,提问作者mikey22022
相关产品推荐
相关产品推荐

