SQL-Abfrage Wobei Feld NICHT $ x enthält


132

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


Kann ich die CONTAINS () -Funktion (SQL) verwenden, um dieselbe Prüfung durchzuführen?
Kate

Antworten:


291

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%';

1
was ist xb Ihre Briefe sind sehr, sehr verwirrend. Ich empfehle die Verwendung einer Tabelle oder eines Feldes.
Whitecat

Stellen Sie sicher, dass bei Verwendung einer Unterabfrage NOT INkeiner 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;
Bacon Bits

17

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 INmacht 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.


Was gilt als richtig entkommen? Ich weiß, dass man mit normalen Saiten nur ein paar Dingen entkommen muss, aber LIKE hat einige besondere Sonderzeichen.
Pieter Bos
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.