是下面的查詢相當於MySQL的NOT IN和NOT LIKE
SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c');
一般來說,這是一個MySQL查詢排除某些字符串值的最佳方式
SELECT * FROM items WHERE field1 NOT LIKE '%a%' AND NOT LIKE '%b%' AND
NOT LIKE '%c%'
?
是下面的查詢相當於MySQL的NOT IN和NOT LIKE
SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c');
一般來說,這是一個MySQL查詢排除某些字符串值的最佳方式
SELECT * FROM items WHERE field1 NOT LIKE '%a%' AND NOT LIKE '%b%' AND
NOT LIKE '%c%'
?
第一個查詢:
SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c');
是一樣的:
SELECT * FROM items WHERE field1 != 'a' AND field1 != 'b' AND field1 != 'c'
這樣一來,你的兩個查詢是不等價的。相反,你的第一個查詢的,你也可以做這樣的事情
SELECT * FROM items WHERE (field1 REGEXP '[abc]') = 0
沒有,無論是查詢是不等價的。
if (field1 = 'abcde')
那麼第一個查詢會忽略此行,因爲「ABCDE」滿足所有條件
abcde Like '%a%'
abcde Like '%b%'
abcde Like '%c%'
但是第二個查詢不會忽視的結果,因爲它會獲取所有記錄,其中場1不等於a和b和c。
他們是不等價的,因爲第一個將匹配:
Mike
Tom
由於沒有A的,B公司和C公司在上面的話。但不
Apple Cobler
其中包含A,B和C的第二個將匹配任何除外:
a
b
c
我想你第二個查詢(NOT IN)是一個更好的辦法來排除某些字符串,前提是您不需要對可能的值進行通配符匹配。請注意,LIKE子句在性能方面更加昂貴,因爲它必須對每行進行直接評估,而不是僅僅敲擊索引。