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'