SQL语句应该是相同的,但不是

时间:2011-04-15 14:28:49

标签: sql

  

可能重复:
  SQL NOT IN not working

嘿所有,

我有以下两个问题:

select distinct ID from db2.tran tr
where ID not in(
select distinct id from db2.tran
join (select distinct id from db1.client) as c on c.id = tr.id)


select distinct id from db2.tran tr
where id not in (select distinct id from db1.client)

现在在我看来,这些查询应该是公平的,但是,第一个返回行,而第二个不返回行。我是疯了还是他们为什么这两个人不会出现同样的逻辑?

由于

2 个答案:

答案 0 :(得分:2)

使用您的第二个查询

select distinct id
from   db2.tran tr
where  id not in (select distinct id
                  from   db1.client) 

当子查询返回NULL值时,由于注释中描述的原因,整个查询将始终返回空结果集。 (另见SQL and the Snare of Three Valued Logic

使用您的第一个查询

select distinct ID
from   db2.tran tr
where  ID not in(select distinct id
                 from   db2.tran
                        join (select distinct id
                              from   db1.client) as c
                          on c.id = tr.id)

JOIN条件c.id = tr.id的一个影响是从子查询的结果中排除所有NULL值,因此不会出现此问题。

答案 1 :(得分:0)

我们在使用IN / NOT IN语句时看到非常不一致的结果。

这也应该是等价的:

SELECT
distinct ID 
FROM db2.tran tr
where ID NOT IN (

   SELECT distinct a.id from db2.tran a join db1.client b on (a.id = b.id)

)