1

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

只是想绝对确定这两个语句在功能上是等价的 - 我认为这[SomeCol] = 'XYZ'会更有效一点(可能不引人注目),但不想以后发现我绊倒了一些会产生不同的模糊功能结果。

4

2 回答 2

3

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

于 2013-07-24T10:15:27.670 回答
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,因此两者是等价的。

于 2013-07-24T10:23:38.907 回答