select (Case When Module='3873' THEN 
(select DoorName from NaBon_DoorInfo WHERE DoorId = a.Form and ReadId = a.Intro)
ELSE a.Form End) as Form,  (Case When Module='3873' THEN
(select Impact from NaBon_DoorInfo WHERE DoorId = a.Form and ReadId = a.Intro)
ELSE a.Intro End) as IntroFROM dbo.Warder a
因为当Module不等'3873'时,SQL命令会出现错误,所以只有在特字值也才能查询 NaBon_DoorInfo表资料
我尝试了
FROM dbo.Warder a LEFT OUTER JOIN NaBon_DoorInfo d ON a.Module='3873' AND d.DoorId = a.Form AND d.ReadId = a.Intro
当Module不等'3873'时,也会报错。我想将上边的代码进行一下缩写,因为我感觉这样会读三个表,从而会影响运行的速度。
求一个更好的写法!

解决方案 »

  1.   

    select (Case When Module='3873' THEN 
            (select TOP 1 DoorName from NaBon_DoorInfo WHERE DoorId = a.Form and ReadId = a.Intro)
        ELSE a.Form End) as Form,     (Case When Module='3873' THEN
            (select TOP 1 Impact from NaBon_DoorInfo WHERE DoorId = a.Form and ReadId = a.Intro)
        ELSE a.Intro End) as IntroFROM dbo.Warder a
      

  2.   

    select d.doorname as form,d.impact as intro
    from dbo.warder a join nabon_doorinfo d on d.doorid = a.form and d.readid = a.intro
    where a.module='3873'
    union all
    select a.form  as form,a.intro as intro
    from dbo.warder a 
    where a.module<>'3873'