日期:2014-05-17  浏览次数:20475 次

not in 的一个问题

  --SM_YCDXDETAIL 无2013070450记录
   select * from JSJD_N_YONGCHANG where  JSJD_N_YONGCHANG.guid='2013070450'  -- 1条记录

   select FSourceGUID from SM_YCDXDETAIL where FSourceGUID ='2013070450'  --0条记录

  select * from JSJD_N_YONGCHANG where  
  JSJD_N_YONGCHANG.guid not in (select FSourceGUID from SM_YCDXDETAIL) 
  and JSJD_N_YONGCHANG.guid='2013070450'
  为什么查不出数据?

  select * from JSJD_N_YONGCHANG where 
  not exists(select 1 from SM_YCDXDETAIL where JSJD_N_YONGCHANG.guid =     SM_YCDXDETAIL.FSourceGUID)
  and JSJD_N_YONGCHANG.guid='2013070450'   -- 1条记录




------解决方案--------------------
网上搜三值逻辑,这是not in 和 not exist的区别
------解决方案--------------------
这串SQL的逻辑不一样吧

第一串SELECT是先查询JSJD_N_YONGCHANG.guid 不存在于SM_YCDXDETAIL.FSourceGUID
并且 JSJD_N_YONGCHANG.guid='2013070450'

这句实际的的意思就是JSJD_N_YONGCHANG.guid='2013070450'并且SM_YCDXDETAIL.FSourceGUID不存在'2013070450'

第二串SELECT是JSJD_N_YONGCHANG.guid 不存在于SM_YCDXDETAIL.FSourceGUID并且JSJD_N_YONGCHANG.guid != '2013070450'

如果第二串的逻辑是对的话,第一串的SQL查询应该为


??select?*?from?JSJD_N_YONGCHANG?where??
??JSJD_N_YONGCHANG.guid?not?in?(select?FSourceGUID?from?SM_YCDXDETAIL)?
??and?JSJD_N_YONGCHANG.guid<>'2013070450'