读书人

not in 的一个有关问题

发布时间: 2013-07-16 22:38:05 作者: rapoo

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'

读书人网 >SQL Server

热点推荐