Ist es möglich, eine where-Klausel zu negieren?
z.B
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Frank Vilea
quelle
quelle
id != NULL
funktioniert nicht wie erwartet.Antworten:
Sie können dies tun
ODER
Wie @Frank Schmitt bemerkte, sollten Sie auch bei den NULL-Werten vorsichtig sein. Wenn Sie alles löschen möchten, was nicht ist
2
(einschließlich der NULL-Werte), fügen SieOR id IS NULL
der WHERE-Klausel hinzu.quelle
!= NULL
nicht funktionieren: "Sie können keine arithmetischen Vergleichsoperatoren wie =, <oder <> verwenden, um auf NULL zu testen." ( aus der MySQL-Dokumentation ). Das heißt also, Sie müssen verwendenIS NOT NULL
.Ihre Frage wurde bereits von den anderen Postern beantwortet, darauf möchte ich nur hinweisen
(oder Varianten davon, nicht id = 2 usw.) löscht keine Zeilen, in denen id NULL ist.
Wenn Sie auch Zeilen mit id = NULL löschen möchten:
quelle
edit: um die Syntax für MySQL zu korrigieren
quelle
Sie können Folgendes tun:
quelle
Verwenden Sie
<>
diese Option, um die where-Klausel zu negieren.quelle
Schauen Sie zurück auf formale Logik und Algebra. Ein Ausdruck wie
kann auf verschiedene Arten negiert werden:
Der offensichtliche Weg:
Das Obige kann auch angepasst werden. Sie müssen sich nur einige Eigenschaften logischer Ausdrücke merken:
!( A & B )
ist das Äquivalent von(!A | !B)
.!( A | B )
ist das Äquivalent von(!A & !B)
.!( !A )
ist das Äquivalent von (A).Verteilen Sie das NOT (!) Auf den gesamten Ausdruck, für den es gilt, invertieren Sie die Operatoren und eliminieren Sie dabei doppelte Negative:
Daher kann im Allgemeinen jede where-Klausel gemäß den oben genannten Regeln negiert werden. Die Negation davon
ist
oder
Welches ist besser? Das ist eine sehr kontextsensitive Frage. Nur Sie können das entscheiden.
Beachten Sie jedoch, dass die Verwendung von NOT Auswirkungen darauf haben kann, was der Optimierer kann oder nicht. Möglicherweise erhalten Sie einen nicht optimalen Abfrageplan.
quelle
WHERE id <> 2
sollte gut funktionieren ... Ist es das, wonach Sie suchen?quelle
Ja. Wenn mir das Gedächtnis dient, sollte das funktionieren. Unsere könnten Sie verwenden:
quelle
Beste Lösung ist zu verwenden
quelle
Ich habe gerade dieses Problem gelöst. Wenn Sie <> verwenden oder sich nicht in einer Variablen befinden, die null ist, führt dies zu false. Anstelle von <> 1 müssen Sie dies also wie folgt überprüfen:
quelle