[oracle] 查詢時若欄位有空值則查不出東西

點閱: 11

今天發現,在 oracle 中,若查詢需要過濾的欄位中有空值,必須先處理 null ,不然就算欄位有 null 以外的值,也查不到。用以下範例來說明:

-- 查詢指令
SELECT ID, TYPE FROM USER

查詢結果如下,可以發現 TYPE 欄位中有 DS 以及 NULL 值

file

此時,我想要查出 TYPE != 'DS' 的 ID,預期會查出 ID 為 00320518, 00326426, 00326711的資料,那我們來看看結果吧:

SELECT ID, TYPE FROM USER WHERE TYPE != 'DS'

查詢結果竟然是空白?!與預期的完全不同?

file

與公司的 DBA 詢問後,確認是因為 TYPE 欄位內有 NULL 導致的,因為在使用 where 語句時, Oracle 若判斷這個欄位內有空值,則回傳的結果就為空值,因此要針對 NULL 值處理,把查詢指令修改為:

SELECT ID, TYPE FROM USER WHERE (TYPE != 'DS' OR TYPE IS NULL)

結果就符合預期了

file

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts