VorwortAls 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:
|
<<: Fassen Sie die häufig verwendeten n-ten-Kind-Selektoren zusammen
>>: Zusammenfassung der Anwendung von Übergangskomponenten in Vue-Projekten
Ich wollte wissen, wie ich mit einem Domänennamen...
Die neue offizielle Website ist online, aber die ...
Ich habe heute mit den Netzwerkeinstellungen unte...
0. Als ich dieses Dokument erstellte, war es unge...
Vorwort Der Grund für das Schreiben dieses Artikel...
Verwendung des Plugins „Veröffentlichen über SSH“...
Als ich heute einen Flash-Werbecode schrieb, habe ...
Ich habe viel online gesucht und festgestellt, da...
Zusammenfassung: HBase verfügt über zahlreiche Be...
1. Was ist ein Servlet 1.1. Erklären Sie in offiz...
In diesem Artikel wird der spezifische Code für J...
Beim Abspielen von Musik werden die Liedtexte im ...
Es gibt zwei Möglichkeiten, schreibgeschützte Eing...
Holen Sie sich das IP-Tool importiere lombok.exte...
Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...