关于在where 后接case when 查询效率的问题

心有微凉何处雨 2019-08-19 09:59:53
有个疑问,有时候在写查询时,需要 使用 select case when a.Field ='x' then 'y' when a.ffield2 = …… end from a join b on a.fid = b.fid where case when a.Field ='x' then 'y' when a.ffield2 = …… end in('y','z')
这样的语法。
因为case when 语句比较长,不想在where 后面再写一遍,想改成

select t.* from (
select case when a.Field ='x' then 'y' when a.ffield2 = …… end FCase from a join b on a.fid = b.fid where t.FCase in('y','z')) t

不知道哪种效率高?
...全文
852 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
永爱果果 2019-08-25
  • 打赏
  • 举报
回复
生成个临时表就好了,写起来简单还好理解
吉普赛的歌 版主 2019-08-25
  • 打赏
  • 举报
回复
你说的两种都不高。 Where a.field in ('x') 直接取原始值就好了,不要作任何转换。 最好创建一个相关索引。 至于Select 后面的Case when 随便你,无所谓。

34,576

社区成员

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

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