什么是在SQL查询中检查列的空值或值的有效方法。考虑具有索引的整数列column
的sql表table
。 @value
可以是一些整数或空例如:16或null。用于比较SQL中列的NULL或值的有效方法
查询1:不确定,但似乎不应该依赖SQL中的短路。但是,当@value
是某个整数或null时,下面的查询总是可以正常工作。
select * from
table
where (@value is null or column = @value)
以下查询是上述查询的扩展版本。它也可以正常工作。
select * from
table
where ((@value is null)
or (@value is not null and column = @value))
上述2个查询会利用索引吗?
查询2:下面的查询比较列与非空@value
否则将列column
与它自己进行比较,它总是为真并返回所有内容。它也可以正常工作。这个查询会利用索引吗?
select * from
table
where (column = isnull(@value, column))
什么是最好的方法?
注意:如果答案因数据库而异,我对MS-SQL感兴趣。
,以确定是否会有些使用索引或不就是最好的方法创建一个包含大量行的测试表,创建索引并检查查询的查询计划。 – 2010-06-24 14:42:45
请注意,由于条件null = null的计算结果为null,因此Query 2 **不会返回表中列值为null的值,而不是true。 – 2010-06-24 14:53:41
马克,谢谢指出。该列不为空,因此在这种情况下不会发生。 – hIpPy 2010-06-24 15:10:23