2011-11-14 246 views
1

是下面的查詢相當於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%' 

回答

0

第一個查詢:

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 

manual about REGEXP for more info

1

他們是不等價的,因爲第一個將匹配:

Mike 
Tom 

由於沒有A的,B公司和C公司在上面的話。但不

Apple Cobler 

其中包含A,B和C的第二個將匹配任何除外:

a 
b 
c 

我想你第二個查詢(NOT IN)是一個更好的辦法來排除某些字符串,前提是您不需要對可能的值進行通配符匹配。請注意,LIKE子句在性能方面更加昂貴,因爲它必須對每行進行直接評估,而不是僅僅敲擊索引。