Consulta SQL Donde EL Campo NO Contiene $x


Quiero encontrar una consulta SQL para encontrar filas donde field1 no contiene $x. ¿Cómo puedo hacer esto?

 98
Author: Aeon, 2008-10-24

2 answers

¿Qué tipo de campo es este? El operador IN no se puede usar con un solo campo, pero está destinado a usarse en subconsultas o con listas predefinidas:

-- 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);

Si está buscando una cadena, vaya por el operador LIKE (pero esto será lento):

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

Si lo restringes para que la cadena que estás buscando tenga que comenzar con la cadena dada, puede usar índices (si hay un índice en ese campo) y ser razonablemente rápido:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
 218
Author: Vegard Larsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-24 11:39:26

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Asegúrese de escapar properly x correctamente de antemano para evitar la inyección SQL)

Editar: NOT IN hace algo un poco diferente - tu pregunta no está totalmente clara, así que elige cuál usar. LIKE 'xxx%' puede usar un índice. LIKE '%xxx' o LIKE '%xxx%' no puede.

 14
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-24 09:45:40