比如下面SQL语句:declare @FCardName varchar(50)select  @FCardName='恒生'--@FCardName是变量,假设@FCardName='恒生'select FCardName,FBillNo,FItemName
from a 
where FBillNo not in ( 
      select FBillNo from b where FCardName=@FCardName)
我发现用了not in 在查询分析器运行很慢,我的问题是用什么方法代替 not in ,代替 not in 前提是运行速度不能慢。

解决方案 »

  1.   

    select FCardName,FBillNo,FItemName
    from a  
    where  not exists (  
      select 1 from b where a.FBillNo=b.FBillNo and FCardName=@FCardName)
      

  2.   

    select FCardName,FBillNo,FItemName
    from a  
    where  not exists (  
      select FBillNo from b where FBillNo=a.FBillNo and FCardName=@FCardName)
      

  3.   

    select FCardName,FBillNo,FItemName
    from a t 
    where not exists (  
      select 1 from b where FBillNo = t.FBillNo  FCardName=@FCardName)
      

  4.   


    --try:declare @FCardName varchar(50)
    select @FCardName='恒生'
    select FCardName,FBillNo,FItemName from a left join b
    on b.FBillNo=a.FBillNo and b.FBillNo is null
    where b.FCardName=@FCardName
      

  5.   

    declare @FCardName varchar(50)
    select @FCardName='恒生'
    select * from a left join b
    on b.FBillNo!=a.FBillNo 
    where b.FCardName=@FCardName
      

  6.   


    declare @FCardName varchar(50)
    select @FCardName='恒生'
    select * from a left join b
    on b.FBillNo=a.FBillNo and b.FCardName=@FCardName 
     where b.fbillno is null