我從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