等效查询产生不同的结果

时间:2019-09-19 02:25:37

标签: sql database oracle

我相信以下查询是等效的,并且应该产生相同的结果:

select CITY from TBL_X
where CITY not in (
  select CITY from TBL_X
  where CITY in (
    select CITY 
    from TBL_Y
  )
)


select CITY 
from TBL_X
where CITY not in (
  select CITY 
  from TBL_Y
);

但是第一个查询产生10行数据,第二个查询产生0行数据。有什么合理的解释吗?

1 个答案:

答案 0 :(得分:4)

请勿将$ wget -c --content-disposition "https://javadl.oracle.com/webapps/download/AutoDL?BundleId=239835_230deb18db3e4014bb8e3e8324f81b43" $ old=$(ls -hat | grep jre | head -n1) $ mv $old $(echo $old | awk -F"?" '{print $1}') 与子查询一起使用。当子查询返回的任何值为not in时,它不返回任何行。

相反,请使用NULL

not exists

您的查询并不相同,就如同它们并非相反:

select x.CITY 
from TBL_X x
where not exists (select 1
                  from tbl_y y
                  where y.CITY = x.CITY 
                 );

这两个子句都过滤掉where x = y where not (x = y) 个值。