[col] in('single element')和[col] ='single element'之间有什么区别?

时间:2013-07-24 10:09:33

标签: sql sql-server tsql

我正在重构同事的旧SQL代码,并在一些地方注意到where [SomeCol] in ('XYZ')形式的where子句。我假设这只是代码中其他地方快速复制粘贴的结果,括号中有更多值(where [SomeCol] in ('ABC', 'DEF', 'XYZ'))并将其替换为[SomeCol] = 'XYZ',即使只是为了这个缘故整洁。

只是想绝对确定这两个陈述在功能上是等同的 - 我会假设[SomeCol] = 'XYZ'有点(可能是不可靠的)更有效率,但是我不想在以后发现我绊倒一些模糊的功能会产生不同的结果。

2 个答案:

答案 0 :(得分:3)

它们在操作上应该是相同的。当我在开始时只有一个值但我怀疑将来可能需要其他值时,我有时会完成IN。这样可以更轻松地添加新值而无需更改语句的结构。只是猜测“为什么”。

答案 1 :(得分:1)

它们是等价的。

对于IN列表中小于63的值,SQL Server将IN列表扩展为多个OR。例如,

[SomeCol] IN (1,2,3,4) 

将被视为

([SomeCol]=1 or [SomeCol]=2 or [SomeCol]=3 or [SomeCol]=4)

因此在这种情况下,没有OR,因此两者都是等价的。