這是你的原始狀態:
where l.country not like "%USA%" or "%CA%" ORDER BY l.state
我假設你打算這意味着「國既不是美國,也不CA」。
如果是的話,你會這樣寫:
where l.country not like '%USA%' and l.country not like '%CA%' ORDER BY l.state
但有SQL中沒有語法NOT LIKE 'X' OR 'Y'
。謂詞LIKE
有一個左操作數和一個右操作數,不再有。
你寫的表達式是一個有效的表達式,但不會做你認爲它的作用。這就像,如果你這樣寫:
where (l.country not like "%USA%") or ("%CA%") ORDER BY l.state
也就是說,兩個術語,由OR
分離,首先是LIKE
比較,第二個是隻是一個單一的字符串自身的文字。這是一個表達式中的有效術語,但它沒有任何用處。這就像寫作:
x = 6 * 8 + 0
零表達有什麼影響?沒有。
更新:我錯了,我忽略了你寫的查詢的一個效果。你應該知道在一個布爾表達式中,如果你使用OR
兩個術語,如果第二項總是TRUE,那麼第一項是什麼並不重要。
WHERE (some expression) OR (TRUE)
這總是如此。
字符串'%CA%'
計數爲真,因爲它不是空字符串或NULL。因此,在原來的查詢中,無論國家是什麼,WHERE子句都是正確的。
是的,但它是基於正則表達式的較慢方法。目前出現什麼問題 – GurV
您的實際邏輯是什麼?你想匹配沒有美國_和_ CA,美國_或_ CA的記錄嗎? –