如何用SQL查找Auct_Car_ex有但Auct_Car没有的HORSEPOWER值
查找仅存在于外部表的Horsepower值实现方案
两表总行数一致但Horsepower字段去重计数差1,说明外部表存在内部表未收录的马力值,可通过以下任意一种SQL语句查询目标值:
- 方案1:
EXCEPT差集查询(语义最直观,自动去重,推荐优先使用)
SELECT [HORSEPOWER] AS Only_In_Ex_Horsepower FROM [dbo].[Auct_Car_Ex] EXCEPT SELECT [Horsepower] FROM [dbo].[Auct_Car];
说明:EXCEPT会自动返回左查询存在、右查询不存在的去重结果,不需要额外加DISTINCT,对NULL值也会做等值判定,完全符合差集查询的预期。
- 方案2:
NOT EXISTS子查询(性能优异,方便扩展查询异常关联数据)
SELECT DISTINCT ex.[HORSEPOWER] AS Only_In_Ex_Horsepower FROM [dbo].[Auct_Car_Ex] ex WHERE NOT EXISTS ( SELECT 1 FROM [dbo].[Auct_Car] c WHERE c.[Horsepower] = ex.[HORSEPOWER] );
说明:如果需要同步查询这些缺失马力值对应的外部表其他字段(比如车辆ID、入库时间等定位异常原因),直接在SELECT后加对应字段即可,不需要改写整体逻辑。
- 方案3:左连接判空(通用兼容写法,适配所有支持SQL标准的数据库)
SELECT DISTINCT ex.[HORSEPOWER] AS Only_In_Ex_Horsepower FROM [dbo].[Auct_Car_Ex] ex LEFT JOIN [dbo].[Auct_Car] c ON ex.[HORSEPOWER] = c.[Horsepower] WHERE c.[Horsepower] IS NULL;
执行任意一条语句返回的结果,就是仅在
[dbo].[Auct_Car_Ex]中存在、[dbo].[Auct_Car]中缺失的HORSEPOWER值,正常情况下这里会返回1条记录,刚好匹配两表去重计数差1的现象。
内容的提问来源于stack exchange,提问作者user8314628
相关产品推荐
相关产品推荐

