--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条记录

解决方案 »

  1.   

    网上搜三值逻辑,这是not in 和 not exist的区别
      

  2.   

    这串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'
      

  3.   

    2楼你理解错了查询guid=2013070450的记录,并且它要在第三张表中不存在
      

  4.   

    测试代码如下,应该是有记录的..create table tab1(guid varchar(10))
    create table tab2(x2 varchar(10))insert into tab1 select '111' union all select '222'
    insert into tab2 select '555' union all select '666'select * from tab1 where guid='222'select * from tab2 where x2='222'
    select * from tab1 
    where tab1.guid not in (select x2 from tab2)
    and tab1.guid='222'/*
    guid
    ----------
    222(1 row(s) affected)
    */