2011-11-14 5 views
1

をLIKE次のクエリMySQLのNOT INとNOT

SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c'); 

に相当

SELECT * FROM items WHERE field1 NOT LIKE '%a%' AND NOT LIKE '%b%' AND 
NOT LIKE '%c%' 

は、一般的にMySQLのクエリで特定の文字列の値を除外するための最良の方法である、話していますか?

答えて

0

あなたの最初のクエリ:

SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c'); 

はこれと同じである。そのようにし

SELECT * FROM items WHERE field1 != 'a' AND field1 != 'b' AND field1 != 'c' 

、あなたの2つのクエリは同等ではありません。代わりにあなたの最初のクエリの、あなたもこの

SELECT * FROM items WHERE (field1 REGEXP '[abc]') = 0 

ような何かを行うことができmanual about REGEXP for more info

0

はありません、クエリの両方が同等ではありませんを参照してください。

if (field1 = 'abcde') 

それがどこのフィールドすべてのレコードをフェッチするため、2番目のクエリは、結果を無視しないであろうが、全ての条件

abcde Like '%a%' 
abcde Like '%b%' 
abcde Like '%c%' 

「ABCDE」を満たしているため、最初のクエリは、この行を無視します1はaとb、cと等しくない。

http://www.w3schools.com/sql/sql_like.asp

http://www.w3schools.com/sql/sql_in.asp

1

最初は一致するので、彼らは等価ではない。

Mike 
Tom 

を全くAさん、BさんとCさんは、上記の言葉ではありませんように。しかしない

Apple Cobler 

A、B及びCの第二の以外のものと一致します含む:

a 
b 
c 

私はあなたの2番目の問合せ(NOT IN)は、特定の文字列を除外するには良い方法だと思います、可能な値に対してワイルドカードの照合を行う必要がない場合に限ります。 LIKE句は、単にインデックスを使用するのではなく、各行で直接評価する必要があるため、パフォーマンス面でより高価です。