Die Fallstricke bei der Beurteilung von NULL-Werten in MySQL

Die Fallstricke bei der Beurteilung von NULL-Werten in MySQL

Vorwort

Als ich heute ein Programm entwickelte, verwendete ich die Case-When-Syntax, um Daten zur Beurteilung aus MySQL zu extrahieren. Während der Verwendung stieß ich bei der Beurteilung des NULL-Werts auf ein kleines Problem.

Die Case-When-Anweisung in MySQL ähnelt der Switch-Anweisung in Java und ist flexibler, allerdings ist die Handhabung von Null in MySQL etwas speziell.

MySQL-Fall mit Syntax:

Syntax 1:

CASE Fallwert
    WANN when_value DANN Anweisungsliste
    [WENN When_Value DANN Anweisungsliste] ...
    [ELSE-Anweisungsliste]
FALL ENDE

Syntax 2:

FALL
    WANN Suchbedingung DANN Anweisungsliste
    [WENN Suchbedingung DANN Anweisungsliste] ...
    [ELSE-Anweisungsliste]
FALL ENDE

Hinweis: Es gibt einen Unterschied zwischen diesen beiden Syntaxen. Der Unterschied ist wie folgt:

1: Die erste Syntax: case_value muss ein Ausdruck sein, wie z. B. userid%2=1 oder Benutzername ist null. Diese Syntax kann nicht zum Testen auf NULL verwendet werden.

2: Die zweite Syntax CASE erfordert keine Variablen oder Ausdrücke. Bei direkter Ausführung werden die Bedingungen nach jedem WHEN ausgewertet und ausgeführt, wenn sie erfüllt sind.

Fallbeispiel:

Die Tabellenstruktur ist wie folgt: a-Wert ist null, b-Wert ist 1

mysql> WÄHLEN SIE NULL ALS a, 1 ALS b;
+------+---+
| ein | b |
+------+---+
| NULL | 1 |
+------+---+

Implementieren Sie nun: Wenn der Wert von a null ist, nehmen Sie den Wert von b, andernfalls nehmen Sie den Wert von a

Methode 1: ifnull-Verwendung

WÄHLEN
    IFNULL(a, b) AS neu,
    A,
    B
AUS
    -- Erstellen Sie eine temporäre Tabelle: Der Wert von a ist null und der Wert von b ist 1
    (WÄHLEN SIE NULL ALS a, 1 ALS b) tmp;

Methode 2: Fall bei Verwendung

WÄHLEN
    (
        FALL
        WENN a NULL IST, DANN
            B
        ANDERS
            A
        ENDE
    ) WIE NEU,
    A,
    B
AUS
    (WÄHLEN SIE NULL ALS a, 1 ALS b) tmp;

Wir stellten fest, dass das Ergebnis falsch war. Der Wert von new war null statt 1, wie wir wollten.

Warum tritt dieser Fehler auf? Dies wird durch das Mischen der ersten Syntax mit der zweiten Syntax verursacht. Es gibt zwei Werte von commission_pct nach case: einen realen Wert oder null, und commission_pct ist null, nachdem es auch zwei Werte hat: true oder false. Wenn der Wert nach case null ist, kann er daher niemals mit true oder false übereinstimmen, sodass die Ausgabe nicht null ist.

Wenn Sie in diesem Fall Syntax 1 verwenden müssen, können Sie sie wie folgt umschreiben:

WÄHLEN
    (
        FALL a IST NULL
        WENN WAHR, DANN b
        ANDERS         
        ENDE
    ) WIE NEU,
    A,
    B
AUS
    (WÄHLEN SIE NULL ALS a, 1 ALS b) tmp;

Sie können auch Syntax 2 verwenden, um Folgendes zu schreiben:

WÄHLEN
    (
        FALL
        WENN a NULL ist, DANN b 
        ANDERS 
        ENDE
    ) WIE NEU,
    A,
    B
AUS
    (WÄHLEN SIE NULL ALS a, 1 ALS b) tmp;

Beachten Sie einen weiteren Fall, in dem möglicherweise Fehler vorliegen, die jedoch nicht leicht zu erkennen sind:

WÄHLEN
    (
        FALL
        WENN NULL, DANN b
        ANDERS         
        ENDE
    ) WIE NEU,
    A,
    B
AUS
    (WÄHLEN SIE NULL ALS a, 1 ALS b) tmp;

Es scheint, als gäbe es kein Problem, aber tatsächlich gibt es ein Problem. Der Grund für das Problem ist, dass null nicht mit = beurteilt werden kann. Einfach ausgedrückt wird bei der Verwendung von = der Wert des Case-Ausdrucks in Syntax 1 mit dem Wert des nachfolgenden Ausdrucks verglichen, in MySQL muss jedoch is oder is not verwendet werden.

Zusammenfassen:

1: Syntax 1 berechnet den Ausdruckswert nach dem Fall und verwendet dann "=", um zu beurteilen, ob der Wert der When-Bedingung gleich ist. Wenn sie gleich sind, geben Sie den Zweig ein.

2: Syntax 2 erfordert keinen Ausdruck nach case. Sie können den Bedingungswert direkt nach when auswerten. Wenn er wahr ist, geben Sie ein.

Dies ist das Ende dieses Artikels über die Groß- und Kleinschreibung bei der Beurteilung von NULL-Werten in MySQL. Weitere relevante Inhalte zu MySQLs Groß- und Kleinschreibung bei der Beurteilung von NULL-Werten finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Anweisungen zur Verwendung der MySQL CASE WHEN-Anweisung
  • Mehrere Beispiele für die Verwendung der CASE WHEN-Anweisung von MySQL
  • So verwenden Sie die Case-When-Anweisung in MySQL, um eine Abfrage mit mehreren Bedingungen zu implementieren
  • Beispiel für die Verwendung von CASE WHEN beim Sortieren in MySQL

<<:  Fassen Sie die häufig verwendeten n-ten-Kind-Selektoren zusammen

>>:  Zusammenfassung der Anwendung von Übergangskomponenten in Vue-Projekten

Artikel empfehlen

nginx+tomcat-Beispiel für den Zugriff auf das Projekt über den Domänennamen

Ich wollte wissen, wie ich mit einem Domänennamen...

Detaillierte Beispiele für Docker-Compose-Netzwerke

Ich habe heute mit den Netzwerkeinstellungen unte...

Detailliertes Tutorial zum Bereitstellen von Jenkins basierend auf Docker

0. Als ich dieses Dokument erstellte, war es unge...

So verhindern Sie, dass Flash HTML-Div-Elemente abdeckt

Als ich heute einen Flash-Werbecode schrieb, habe ...

Zusammenfassung der 10 gängigen HBase-Betriebs- und Wartungstools

Zusammenfassung: HBase verfügt über zahlreiche Be...

JavaScript-Code zum Erzielen eines einfachen Kalendereffekts

In diesem Artikel wird der spezifische Code für J...

Setzen Sie den Eingang auf schreibgeschützt über deaktiviert und schreibgeschützt

Es gibt zwei Möglichkeiten, schreibgeschützte Eing...

Lösen Sie das Problem, dass die mit nginx erhaltene IP-Adresse 127.0.0.1 ist

Holen Sie sich das IP-Tool importiere lombok.exte...

Auszeichnungssprache – CSS-Stil für Webanwendungen

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...