我正在重构同事的旧SQL代码,并在一些地方注意到where [SomeCol] in ('XYZ')
形式的where子句。我假设这只是代码中其他地方快速复制粘贴的结果,括号中有更多值(where [SomeCol] in ('ABC', 'DEF', 'XYZ')
)并将其替换为[SomeCol] = 'XYZ'
,即使只是为了这个缘故整洁。
只是想绝对确定这两个陈述在功能上是等同的 - 我会假设[SomeCol] = 'XYZ'
有点(可能是不可靠的)更有效率,但是我不想在以后发现我绊倒一些模糊的功能会产生不同的结果。
答案 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,因此两者都是等价的。