我从SQL Server的多年工作中得到了一个模糊的,可能是货运信息的内存,当你有一个可能为null的列时,编写“WHERE”子句是不安全的谓词,如:SQL和逻辑运算符以及空值检查
... WHERE the_column IS NULL OR the_column < 10 ...
它有事可做的事实,SQL规则没有规定短路(事实上这是一个坏主意种,一种可能的查询优化的原因),因此“ <“比较(或其他)即使列值为空也可以被评估。现在,正是为什么这会是一件可怕的事情,我不知道,但我记得一些文件被正告总是代码为“CASE”条款:
... WHERE 1 = CASE WHEN the_column IS NULL THEN 1 WHEN the_column < 10 THEN 1 ELSE 0 END ...
(愚蠢的“1 =”部分是因为SQL Server不/没有一流的布尔值,或者至少我认为它没有)
所以在这里我的问题是:
- 是这对于SQL Server(或者可能是SQL Server 2000或2005的后端版本)来说确实如此,或者我只是疯了吗?
- 如果是这样,对PostgreSQL的适用警告是否适用? (8.4如果重要)
- 究竟是什么问题?它是否与索引如何工作有关?
我在SQL中的基础很弱。
也许他们都在谈论和?由于null和任何内容都为空,因此在表达式可能包含空项的情况下,经常需要合并或案例。 – 2011-12-21 08:19:18