values update tablas into example mysql sql where negate

mysql - update - Condición SQL WHERE, no igual a?



union mysql dos tablas (9)

¿Es posible negar una cláusula where?

p.ej

DELETE * FROM table WHERE id != 2;


Mira hacia atrás a la lógica formal y el álgebra. Una expresión como

A & B & (D | E)

puede ser negado de varias maneras:

  • La forma obvia:

    !( A & B & ( D | E ) )

  • Lo anterior también puede reformularse, solo necesita recordar algunas propiedades de 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 NOT (!) En toda la expresión a la que se aplica, invierta operadores y elimine dobles negativos a medida que avanza:

    !A | !B | ( !D & !E )

Entonces, en general, cualquier cláusula where puede ser negada de acuerdo con las reglas anteriores. La negación de esto

select * from foo where test-1 and test-2 and ( test-3 OR test-4 )

es

select * from foo where NOT( test-1 and test-2 and ( test-3 OR test-4 ) )

o

select * from foo where not test-1 OR not test-2 OR ( not test-3 and not test-4 )

¿Cual es mejor? Esa es una pregunta muy sensible al contexto. Solo tú puedes decidir eso.

Tenga en cuenta, sin embargo, 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.


Puedes hacer esto

DELETE FROM table WHERE id NOT IN ( 2 )

O

DELETE FROM table WHERE id <> 2

Como notó @Frank Schmitt, también debería tener cuidado con los valores NULL. Si desea eliminar todo lo que no es 2 (incluidos los NULL), agregue OR id IS NULL a la cláusula WHERE.


Sí. Si la memoria me sirve, debería funcionar. Nuestro podría usar:

DELETE FROM table WHERE id <> 2


Solo estaba resolviendo este problema. Si usa <> o no está en una variable, eso es nulo, dará como resultado falso. Entonces, en lugar de <> 1, debes verificarlo así:

AND (isdelete is NULL or isdelete = 0)


Su pregunta ya fue respondida por los otros carteles, solo me gustaría señalar que

delete from table where id <> 2

(o sus variantes, no id = 2, etc.) no eliminará las filas donde id es NULL.

Si también desea eliminar filas con id = NULL:

delete from table where id <> 2 or id is NULL


Usa <> para negar la cláusula where.


Usted podría hacer lo siguiente:

DELETE * FROM table WHERE NOT(id = 2);


WHERE id <> 2 debería funcionar bien ... ¿Es eso lo que buscas?


delete from table where id <> 2



editar: para corregir la sintaxis de MySQL