可能重复:
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)
现在在我看来,这些查询应该是公平的,但是,第一个返回行,而第二个不返回行。我是疯了还是他们为什么这两个人不会出现同样的逻辑?
由于
答案 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)
)