it-swarm.com.de

SQL Query Where Field enthält NICHT $ x

Ich möchte eine SQL-Abfrage finden, um Zeilen zu finden, in denen field1 nicht $ x enthält. Wie kann ich das machen?

115
zuk1

Was für ein Feld ist das? Der IN-Operator kann nicht für ein einzelnes Feld verwendet werden, sondern ist für die Verwendung in Unterabfragen oder mit vordefinierten Listen vorgesehen:

-- 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 eine Zeichenfolge suchen, geben Sie den Operator LIKE ein (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 Zeichenfolge, nach der Sie suchen, 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%';
247
Vegard Larsen

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Stellen Sie sicher, dass Sie $ x vorher ordnungsgemäß entkommen, um SQL-Injection zu vermeiden.)

Bearbeiten: NOT IN macht etwas anderes - deine Frage ist nicht ganz klar, also wähle die aus, die du verwenden möchtest. LIKE 'xxx%' kann einen Index verwenden. LIKE '%xxx' oder LIKE '%xxx%' kann nicht.

15
Greg