¿Es posible negar una cláusula where?
p.ej
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Frank Vilea
fuente
fuente
id != NULL
no no funcionará como se espera.Respuestas:
Puedes hacer esto
O
Como señaló @Frank Schmitt, es posible que también desee tener cuidado con los valores NULL. Si desea eliminar todo lo que no lo es
2
(incluidos los NULL), agregueOR id IS NULL
a la cláusula WHERE.fuente
!= NULL
no funcionan: "No puede usar operadores de comparación aritmética como =, <o <> para probar NULL". ( de la documentación de MySQL ). Eso significa que tienes que usarIS NOT NULL
.Tu pregunta ya fue respondida por los otros carteles, solo me gustaría señalar que
(o variantes de los mismos, no id = 2, etc.) no eliminará filas donde id es NULL.
Si también desea eliminar filas con id = NULL:
fuente
editar: para corregir la sintaxis de MySQL
fuente
Podrías hacer lo siguiente:
fuente
Úselo
<>
para negar la cláusula where.fuente
Mira hacia atrás a la lógica formal y al álgebra. Una expresión como
se puede negar de dos maneras:
La forma obvia:
Lo anterior también se puede reformular, solo necesita recordar algunas propiedades de las expresiones lógicas:
!( A & B )
es el equivalente de(!A | !B)
.!( A | B )
es el equivalente de(!A & !B)
.!( !A )
es el equivalente de (A).Distribuya el NOT (!) En toda la expresión a la que se aplica, invirtiendo los operadores y eliminando los dobles negativos a medida que avanza:
Entonces, en general, cualquier cláusula where puede ser negada de acuerdo con las reglas anteriores. La negación de este
es
o
¿Cual es mejor? Esa es una pregunta muy sensible al contexto. Solo tú puedes decidir eso.
Sin embargo, tenga en cuenta que el uso de NOT puede afectar lo que el optimizador puede o no puede hacer. Es posible que obtenga un plan de consulta menos que óptimo.
fuente
WHERE id <> 2
debería funcionar bien ... ¿Es eso lo que buscas?fuente
Si. Si la memoria no me falla, debería funcionar. Nuestro podría utilizar:
fuente
La mejor solución es usar
fuente
Solo estaba resolviendo este problema. Si usa <> o no está dentro de una variable, eso es nulo, resultará en falso. Entonces, en lugar de <> 1, debe marcarlo así:
fuente