日期:2014-05-18  浏览次数:20455 次

各位高手,好多or,有办法用别的语句代替吗?
where f1 = 10 or f1= 20 or f1= 15 or f1=26 or f1 = 8 or f1 = 36 。。。。。

各位高手,有没有好办法代替这种写法?用in不错,但是这个sql 的in好像不是用来解决这个问题的

------解决方案--------------------
IN,UNION ALL
------解决方案--------------------
where f1 = 10 or f1= 20 or f1= 15 or f1=26 or f1 = 8 or f1 = 36
改成
where f1 in(10,20,15,26,8,36)
------解决方案--------------------
IN和OR的执行计划是相同的
------解决方案--------------------
SQL code
declare @filter table (id int)
insert into @filter
select 10 union
select 20 union
select 15 union
select 26 union
select 8 union
select 36

select ...
from ..
where exists (select 1 from @filter where id = f1)

------解决方案--------------------
in 的本质就是or其实如果你的条件比较固定,可以把它存放到一个表,然后进行关联。但是注明一句,如果in里面的数量超过一定程度,目前我测试的是10000个左右,就会报错,无法执行,因为编译的代价太高。就算服务器很强大(26个虚拟cpu,40G内存,也是无法执行)。所以要慎重。