を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のクエリで特定の文字列の値を除外するための最良の方法である、話していますか?
を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のクエリで特定の文字列の値を除外するための最良の方法である、話していますか?
あなたの最初のクエリ:
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
はありません、クエリの両方が同等ではありませんを参照してください。
if (field1 = 'abcde')
それがどこのフィールドすべてのレコードをフェッチするため、2番目のクエリは、結果を無視しないであろうが、全ての条件
abcde Like '%a%'
abcde Like '%b%'
abcde Like '%c%'
「ABCDE」を満たしているため、最初のクエリは、この行を無視します1はaとb、cと等しくない。
最初は一致するので、彼らは等価ではない。
Mike
Tom
を全くAさん、BさんとCさんは、上記の言葉ではありませんように。しかしない
Apple Cobler
A、B及びCの第二の以外のものと一致します含む:
a
b
c
私はあなたの2番目の問合せ(NOT IN)は、特定の文字列を除外するには良い方法だと思います、可能な値に対してワイルドカードの照合を行う必要がない場合に限ります。 LIKE句は、単にインデックスを使用するのではなく、各行で直接評価する必要があるため、パフォーマンス面でより高価です。