2008-10-27 111 views
5

我有以下SQL語句:爲什麼這個SQL語句不起作用?

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

它的工作原理罰款的Postgres(返回從日誌中的所有不同的名字,這是不是空的,包含字符串「.EDIT」)。但在Oracle上這個聲明不起作用。任何想法爲什麼?

回答

16
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

1)甲骨文把「」爲NULL,這意味着相比「沒有名字=‘’」從來都不是真的還是假的擴大你的問題;改用「IS NOT NULL」。但是......

2)第二個條件「的名稱LIKE‘%.EDIT%’無論如何都不會匹配一個空字符串,使得第一條件冗餘

因此,作爲重新寫:

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%'; 
+0

感謝您的幫助,它工作的很好!我對冗餘的東西很白癡,但我也不知道,Oracle將''計數爲NULL,謝謝,現在它可以工作。 – Mnementh 2008-10-27 16:20:18

3

Oracle中的空字符串等於NULL,導致比較失敗。 將該部分查詢更改爲NAME不爲NULL

2

您可以在不使用「NOT NAME =''」子句的情況下重寫該查詢。

SELECT DISTINCT name 
FROM log 
WHERE name LIKE '%.EDIT%'; 

這是否適合您?

如果沒有,那麼它不起作用的方式?它會導致錯誤嗎?是否返回了錯誤的結果?

請與該信息:-)