select  distinct b.card_code,mach_mg.mach_code,b.sdz
from mach_mg
inner join (select employee_info.*,a.mach_group,a.sdz
 from employee_info,(select ug_rg.ug_code,rule_group.* 
 from ug_rg,rule_group
  where ug_rg.rule_code=rule_group.rule_code) a
where employee_info.user_group=a.ug_code) b on b.mach_group=mach_mg.group_code
left join membertemp c on convert(varchar(18),b.card_code+mach_mg.mach_code+b.sdz)=
convert(varchar(18),c.CardNo+c.mach_no+c.sd) and c.deleflag=0
--没有数据未测试。

解决方案 »

  1.   

    我晕。想优化?将Not In用Left Join 转化不是更慢。
      

  2.   

    select  distinct b.card_code,mach_mg.mach_code,b.sdz
    from mach_mg,(select employee_info.card_code,a.mach_group,a.sdz
     from employee_info,(select ug_rg.ug_code
     from ug_rg,rule_group
      where ug_rg.rule_code=rule_group.rule_code) a
    where employee_info.user_group=a.ug_code) b
    where b.mach_group=mach_mg.group_code and not exists 
     (select 1 from membertemp c where convert(varchar(18),b.card_code+mach_mg.mach_code+b.sdz =
    convert(varchar(18),c.CardNo+c.mach_no+c.sd) and c.deleflag=0)
      

  3.   

    select distinct b.card_code,mach_mg.mach_code,b.sdz 
    from mach_mg left join (
      (select employee_info.*,a.mach_group,a.sdz from employee_info,(select ug_rg.ug_code,rule_group.*  from ug_rg join rule_group  on ug_rg.rule_code=rule_group.rule_code) a 
       where employee_info.user_group=a.ug_code) b convert(varchar(18),b.card_code+mach_mg.mach_code+b.sdz) not in (select convert(varchar(18),CardNo+mach_no+sd) from membertemp where deleflag=0) 
    on  b.mach_group=mach_mg.group_code and 这样?