É possível negar uma cláusula where?
por exemplo
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Frank Vilea
fonte
fonte
id != NULL
se não funcionar como seria de esperar.Respostas:
Você pode fazer assim
OU
Como @Frank Schmitt observou, você pode querer ter cuidado com os valores NULL também. Se você deseja excluir tudo o que não é
2
(incluindo os NULLs), adicioneOR id IS NULL
à cláusula WHERE.fonte
!= NULL
não estão funcionando: "Você não pode usar operadores de comparação aritmética como =, <ou <> para testar NULL." ( da documentação do MySQL ). Isso significa que você precisa usarIS NOT NULL
.Sua pergunta já foi respondida pelos outros participantes, gostaria apenas de ressaltar que
(ou suas variantes, não id = 2 etc.) não excluirá linhas onde id é NULL.
Se você também deseja excluir linhas com id = NULL:
fonte
editar: para corrigir a sintaxe do MySQL
fonte
Você pode fazer o seguinte:
fonte
Use
<>
para negar a cláusula where.fonte
Reveja a lógica formal e a álgebra. Uma expressão como
pode ser negado de duas maneiras:
A maneira óbvia:
O acima também pode ser reafirmado, você só precisa se lembrar de algumas propriedades das expressões lógicas:
!( A & B )
é o equivalente a(!A | !B)
.!( A | B )
é o equivalente a(!A & !B)
.!( !A )
é equivalente a (A).Distribua o NOT (!) Em toda a expressão à qual se aplica, invertendo os operadores e eliminando os negativos duplos à medida que avança:
Portanto, em geral, qualquer cláusula where pode ser negada de acordo com as regras acima. A negação disso
é
ou
Qual é melhor? Essa é uma questão muito sensível ao contexto. Só você pode decidir isso.
Esteja ciente, porém, de que o uso de NOT pode afetar o que o otimizador pode ou não fazer. Você pode obter um plano de consulta inferior ao ideal.
fonte
WHERE id <> 2
deve funcionar bem ... É isso que você está procurando?fonte
Sim. Se a memória não me falha, isso deve funcionar. Nosso você poderia usar:
fonte
A melhor solução é usar
fonte
Eu estava apenas resolvendo esse problema. Se você usar <> ou não estiver em uma variável, isso é nulo, resultará em falso. Então, em vez de <> 1, você deve marcar assim:
fonte