回答:
これはどんな分野ですか?IN演算子は単一のフィールドでは使用できませんが、サブクエリまたは定義済みリストで使用するためのものです。
-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);
文字列を検索している場合は、LIKE演算子を探します(ただし、これは低速です)。
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';
検索する文字列が指定された文字列で始まるように制限すると、インデックスを使用でき(そのフィールドにインデックスがある場合)、かなり高速になります。
-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
NOT IN、そのためにサブクエリを使用する場合は、どの値もNULLにはなりません。ここでは、使用するSELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); あなたもNULL値を除外するために必要がある場合は、あなたがこれを行う必要があると思います:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (SQLインジェクションを回避するために、事前に$ xを適切にエスケープしてください)
編集:NOT IN少し違うことをします-あなたの質問は完全に明確ではないので、どちらを使用するか選びます。 LIKE 'xxx%'インデックスを使用できます。 LIKE '%xxx'またはLIKE '%xxx%'できません。