求优化一条Select语句!谢谢

soundofsea 2010-07-19 04:10:17

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 Intro

FROM 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'时,也会报错。

我想将上边的代码进行一下缩写,因为我感觉这样会读三个表,从而会影响运行的速度。
求一个更好的写法!

...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson 2010-07-19
  • 打赏
  • 举报
回复
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'
guguda2008 2010-07-19
  • 打赏
  • 举报
回复
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 Intro

FROM dbo.Warder a

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧