Antworten:
Was ist das für ein Feld? Der IN-Operator kann nicht mit einem einzelnen Feld verwendet werden, sondern soll in Unterabfragen oder mit vordefinierten Listen verwendet werden:
-- 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);
Wenn Sie nach einer Zeichenfolge suchen, wählen Sie den Operator LIKE (dies ist jedoch langsam):
-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';
Wenn Sie es so einschränken, dass die gesuchte Zeichenfolge mit der angegebenen Zeichenfolge beginnen muss, kann es Indizes verwenden (wenn es einen Index für dieses Feld gibt) und relativ schnell sein:
-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
NOT IN
keiner der Werte NULL ist, da NOT IN und NULL nicht auf offensichtliche Weise kombiniert werden, wenn Sie mit der dreiwertigen Logik nicht vertraut sind. Hier würden Sie verwenden SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL);
Wenn Sie auch NULL-Werte ausschließen müssen, müssen Sie dies tun: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%';
(Stellen Sie sicher, dass Sie $ x vorher ordnungsgemäß maskieren, um eine SQL-Injection zu vermeiden.)
Bearbeiten: NOT IN
macht etwas anderes - Ihre Frage ist nicht ganz klar, wählen Sie also die zu verwendende aus. LIKE 'xxx%'
kann einen Index verwenden. LIKE '%xxx'
oder LIKE '%xxx%'
kann nicht.