我对这个查询的结果感到很疯狂
此查询返回29.970行(不同的IdDireccionIne):
select distinct IdDireccionIne from DireccionIne as DI
此查询返回29.544行(不同的IdDireccionIne):
select distinct IdDireccionIne from DireccionCorregida
where IdDireccionIne is not null
我想查找第一个查询(29.970行)的IdDireccionIne,它不在第二个查询中(29.544)我应该得到29.970 - 29.544 = 426记录。
select distinct IdDireccionIne from DireccionIne as DI -- 29.970
where IdDireccionIne not in
(select distinct IdDireccionIne from DireccionCorregida
where IdDireccionIne is not null) -- 29.544
令人惊讶的是我获得了0行!!这个查询出了什么问题?
编辑:我甚至在Excel中复制并粘贴了两个查询的结果,我手工找到了第一个结果中不在第二个结果中的记录。我已经多次检查过了。我没怪。这可能有什么问题? IdDireccionIne是两个表中的int。
第二次编辑:正如一条评论所建议的,如果我这样做:
select * from (select distinct IdDireccionIne from DireccionIne as DI) as T1
full outer join
(select distinct IdDireccionIne from DireccionCorregida
where IdDireccionIne is not null) as T2
on T1.IdDireccionIne = T2.IdDireccionIne
where T1.IdDireccionIne is null or T2.IdDireccionIne is null
我得到了预期的426行,左侧是值,右侧是空值。但我仍然不明白为什么我的原始查询找不到它们。
答案 0 :(得分:4)
您可以尝试以下查询:
select distinct IdDireccionIne
from DireccionIne as DI -- 29.970
where IdDireccionIne not in (select distinct DireccionCorregida.IdDireccionIne
from DireccionCorregida
where DireccionCorregida.IdDireccionIne is not null)
范围规则应明确地从子查询子句中获取IdDireccionIne。但我想知道那里是否会有某种混乱。