当前位置:  开发笔记 > 数据库 > 正文

SQL'Or'运算符.它在以下场景中如何工作?

如何解决《SQL'Or'运算符.它在以下场景中如何工作?》经验,为你挑选了1个好方法。

我一直在努力优化查询,并遇到了让我质疑我是如何一直使用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为'Test'的所有记录以及Col2为'Data'的任何记录

在上面的示例中,我将Column2条件修改为以下内容:

AND(Column2 LIKE ISNULL(@Param2, '') + '%')

突然间,我得到0行返回.

我是否误解了OR只评估表达式,直到它找到一个真实的结果或是否有一个条件会导致2个不同的结果返回不同的结果?



1> Cade Roux..:

"OR只评估表达式,直到找到TRUE结果"

它只需要,但这不是你的问题(实际上这就是你在原始情况下拯救你的东西).你的两个查询并不是真正等同的.

我认为你NULL在Column2中有一个永远不会(Column2 LIKE ISNULL(@Param2, '') + '%')成为真实的东西 - 并且在你的原始版本@Param2 = ''中掩盖了这种情况,因为它是真的(有时候)

也许:

(ISNULL(Column2, '') LIKE ISNULL(@Param2, '') + '%')

记住NULL的三值逻辑:

TRUE and UNKNOWN: UNKNOWN
TRUE or UNKNOWN: TRUE

FALSE and UNKNOWN: FALSE
FALSE or UNKNOWN: UNKNOWN

但我不确定你的优化是否真的有帮助.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有