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:
-- subquerySELECT a FROM x WHERE x.b NOTIN(SELECT b FROM y);-- predefined listSELECT a FROM x WHERE x.b NOTIN(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 NOTLIKE'%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 NOTLIKE'text%';
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.
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:
Wenn Sie nach einer Zeichenfolge suchen, wählen Sie den Operator LIKE (dies ist jedoch langsam):
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:
quelle
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 verwendenSELECT 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'
oderLIKE '%xxx%'
kann nicht.quelle