SQL-IN子句与小于列表的等于运算符

时间:2013-04-07 14:20:11

标签: sql sql-server-2008

哪种应该是首选且有效的方式?

where @TeamId in (Team1Id, Team2Id)

where @TeamId=Team1Id or @TeamId=Team2Id

我正在使用sql server 2008。

修改

当我检查执行计划时,两个查询都显示他们正在使用索引和相同的执行计划。

2 个答案:

答案 0 :(得分:5)

两者都是一样的 SQL服务器转换此

where @TeamId in (Team1Id, Team2Id)

where @TeamId=Team1Id or @TeamId=Team2Id

最好将IN与OR进行比较,更易读,更容易。

答案 1 :(得分:0)

对于提供的特定示例,测试变量,IN只是多个OR的语法糖。

然而,在选择关系行的相关情况下,使用连接到另一个关系是优越的,特别是如果被比较的数据字段被索引或者比较值列表增长。使用如下的静态子查询可以轻松创建这样的比较关系:

select *
from data
join (
  select Team1Id as TeamId union all
  select Team2Id 
) comparison on comparison.TeamId = data.TeamId

这种静态子查询技术广泛适用于许多情况。