Est-il possible d'annuler une clause where?
par exemple
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Frank Vilea
la source
la source
id != NULL
ne fonctionne pas comme prévu.Réponses:
Tu peux faire comme ça
OU
Comme @Frank Schmitt l'a noté, vous voudrez peut-être également faire attention aux valeurs NULL. Si vous souhaitez supprimer tout ce qui ne l'est pas
2
(y compris les NULL), ajoutezOR id IS NULL
à la clause WHERE.la source
!= NULL
ne fonctionne pas: "Vous ne pouvez pas utiliser d'opérateurs de comparaison arithmétique tels que =, <ou <> pour tester NULL." (à partir de la documentation MySQL ). Cela signifie donc que vous devez utiliserIS NOT NULL
.Votre question a déjà été répondue par les autres affiches, je voudrais juste souligner que
(ou des variantes de celui-ci, pas id = 2, etc.) ne supprimera pas les lignes où id est NULL.
Si vous souhaitez également supprimer des lignes avec id = NULL:
la source
edit: pour corriger la syntaxe de MySQL
la source
Vous pouvez faire ce qui suit:
la source
Utilisez
<>
pour annuler la clause where.la source
Revenez à la logique formelle et à l'algèbre. Une expression comme
peut être annulé de plusieurs manières:
La manière évidente:
Ce qui précède peut également être reformulé, il vous suffit de vous souvenir de certaines propriétés des expressions logiques:
!( A & B )
est l'équivalent de(!A | !B)
.!( A | B )
est l'équivalent de(!A & !B)
.!( !A )
est l'équivalent de (A).Distribuez le NOT (!) Sur toute l'expression à laquelle il s'applique, en inversant les opérateurs et en éliminant les doubles négatifs au fur et à mesure:
Ainsi, en général, toute clause where peut être annulée selon les règles ci-dessus. La négation de cela
est
ou
Ce qui est mieux? C'est une question très contextuelle. Vous seul pouvez en décider.
Sachez cependant que l'utilisation de NOT peut affecter ce que l'optimiseur peut ou ne peut pas faire. Vous pourriez obtenir un plan de requête moins qu'optimal.
la source
WHERE id <> 2
devrait fonctionner correctement ... C'est ce que vous recherchez?la source
Oui. Si ma mémoire est bonne, cela devrait fonctionner. Notre vous pouvez utiliser:
la source
La meilleure solution est d'utiliser
la source
J'étais juste en train de résoudre ce problème. Si vous utilisez <> ou si vous n'êtes pas sur une variable, c'est-à-dire null, il en résultera faux. Donc au lieu de <> 1, vous devez le vérifier comme ceci:
la source