【发布时间】:2009-01-23 18:25:09
【问题描述】:
我一直致力于优化查询,遇到的情况让我质疑我一直以来如何使用 SQL 的 OR 运算符。 (SQL Server 2000 也是)
我有一个查询,其中条件 (WHERE) 子句如下所示:
WHERE (Column1 = @Param1 or Column1 LIKE @Param1 + '%')
AND (@Param2 = '' OR Column2 = @Param2 OR Column2 LIKE @Param2 + '%')
现在,我一直都明白 SQL 中的 OR 对这两个表达式都求值。因此,所有对左侧表达式评估为 true 的记录将与所有在右侧表达式评估为 true 的记录一起返回。例如:
SELECT * FROM TABLE1
WHERE COL1 = 'Test' OR Col2 = 'Data'
这将返回 COL1 为“测试”的所有记录以及 Col2 为“数据”的任何记录
在上面的示例中,我将 Column2 条件修改为:
AND(Column2 LIKE ISNULL(@Param2, '') + '%')
突然间,我返回了 0 行。
我是否误认为 OR 只计算表达式,直到找到 TRUE 结果,或者是否存在会导致 2 个不同返回不同结果的条件?
【问题讨论】:
-
您可以在更改后的完整位置发布吗?
标签: sql sql-server null three-valued-logic