Anweisungen zur verschachtelten Verwendung von MySQL ifnull

Anweisungen zur verschachtelten Verwendung von MySQL ifnull

Verschachtelte Verwendung von MySQL ifnull

Ich habe online gesucht, ob es eine Möglichkeit gibt, ifnull zu verschachteln, aber anscheinend hat niemand diese Verwendung erwähnt: Die meisten prüfen einfach, ob ein Feld leer ist, und ersetzen es dann durch einen anderen Wert.

Das heißt:

wähle ifnull(a,b) aus A;

Das Problem, auf das ich gestoßen bin, besteht darin, dass es zwei Felder gibt und das Szenario wahrscheinlich folgendermaßen aussieht:

Jedes Geschäft verfügt über zwei Rabattmethoden: vip_discount und simple_discount, die nach dem in der Datenbank gefundenen Rabattfeld benannt sind; vip_discount ist die wichtigste.

Das bedeutet, dass, wenn vip_discount nicht leer ist, sein Wert zurückgegeben wird. Wenn sein Wert leer ist, muss weiter ermittelt werden, ob das Feld simple_discount leer ist. Wenn es nicht leer ist, wird der Wert von simple_discount zurückgegeben, andernfalls wird eine leere Zeichenfolge zurückgegeben.

Hier habe ich überlegt, ob ich verschachtelte ifnull nutzen kann um zu ermitteln, ob ich mein Ziel erreichen kann.

Nachdem ich lange im Internet gesucht und keine ähnlichen Blogs gefunden hatte, dachte ich, ich könnte es selbst versuchen:

Wählen Sie ifnull(vip_discount,ifnull(simple_discount,"")) als Rabatt von A;

Damit ist das Problem gelöst. Auf diese SQL-Anweisung können auch bedingte Anweisungen folgen, um andere bedingte Abfragen zu ergänzen.

Die Fallstricke von MySQL ifnull

Schauen wir uns ohne weitere Umschweife das SQL an:

AKTUALISIEREN
    lb_user u
SETZEN Sie u.Benutzerebene = (
    WÄHLEN
        IFNULL(Level-ID, u.Benutzerebene)
    VON lb_user_level
    WO `status` = 1 UND levelid > u.user_level
    UND (Upgrade-Score < u. empirisch ODER Upgrade-Gesamtgeld < u. Gesamtverbrauchsgeld)
    ORDER BY Ebenen-ID DESC
    GRENZE 1
);

Auf den ersten Blick scheint diese SQL-Anweisung in Ordnung zu sein und wird erfolgreich ausgeführt. Bei erneuter Ausführung schlägt sie jedoch fehl. Der Grund dafür ist, dass die Daten unter den aktuellen Bedingungen nicht abgerufen werden können und die zurückgegebenen Daten leer sind. Beachten Sie, dass die Daten leer sind, d. h. es sind keine Daten vorhanden, nicht dass die Daten vorhanden sind, sondern dass das Feld leer ist. Nach der Untersuchung wird die SQL-Anweisung wie folgt geändert:

AKTUALISIEREN
    lb_user u
SETZEN Sie u.Benutzerebene = IFNULL((
    WÄHLEN
        Ebenen-ID
    VON lb_user_level
    WO `status` = 1 UND levelid > u.user_level
    UND (Upgrade-Score < u. empirisch ODER Upgrade-Gesamtgeld < u. Gesamtverbrauchsgeld)
    ORDER BY Ebenen-ID DESC
    GRENZE 1
), u.Benutzerebene);

Nach der Änderung ist die Ausführung erfolgreich und es liegt kein IFNULL-Fehler vor.

Zusammenfassend sind die Gründe folgende:

In MySQL kann IFNULL nur bestimmen, ob die Daten vorhanden sind und NULL sind, aber nicht, ob die Daten nicht gefunden wurden und NULL sind.

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden.

Das könnte Sie auch interessieren:
  • Lösungen für ungültige Nullsegmentbeurteilungen und IFNULL()-Fehler in MySql
  • Lösung für das MySQL IFNULL-Beurteilungsproblem
  • Zusammenfassung der Wissenspunkte im Zusammenhang mit Null (IFNULL, COALESCE und NULLIF) in MySQL
  • Detaillierte Erklärung der Funktionen IFNULL() und COALESCE() zum Ersetzen von Null in MySQL
  • Eine kurze Erläuterung der ifnull()-Funktion ähnlich der nvl()-Funktion in MySQL
  • Detaillierte Erklärung der Verwendung von IFNULL, NULLIF und ISNULL in MySql
  • Eine kurze Erläuterung der Verwendung der ISNULL-Funktion von SQL Server und der IFNULL-Funktion von MySQL
  • Einführung in den Unterschied zwischen IFNULL, IF und CASE in MySQL

<<:  Einige Fähigkeiten, die Sie beim Erstellen von Webseiten kennen müssen

>>:  HTML zeigt Auslassungspunkte hinter dem Text an... implementiert durch Textüberlauf

Artikel empfehlen

Fehler beim reduzierten Tabellenzeilenelement

Nehmen wir ein Beispiel: Der Code ist sehr einfach...

MySql 8.0.11-Winxp64 (kostenlose Installationsversion) Konfigurations-Tutorial

1. Entpacken Sie das Zip-Paket in das Installatio...

Detaillierte Erläuterung der Docker Volume-Berechtigungsverwaltung

Das Datenvolumen ist ein wichtiges Konzept von Do...

Docker richtet Port-Mapping ein, kann aber nicht auf die Lösung zugreifen

#docker ps-Check, alle Ports sind zugeordnet CONT...

Tomcat-Konfiguration und wie man ihn in Eclipse startet

Inhaltsverzeichnis So installieren und konfigurie...

So verwenden Sie das JavaScript-Strategiemuster zum Validieren von Formularen

Inhaltsverzeichnis Überblick Formularvalidierung ...

Die konkrete Umsetzung des JavaScript-exklusiven Denkens

Im vorherigen Blog hat Xiao Xiong die Methoden ve...

Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls

Inhaltsverzeichnis Legen Sie beim Erstellen einer...

Detaillierte Erklärung des HTML-Bereichs-Tags

Der <area>-Tag definiert einen Bereich in e...

Zusammenfassung des Verständnisses des virtuellen DOM in Vue

Es handelt sich im Wesentlichen um ein allgemeine...

Miniprogramm zur Implementierung des Paging-Effekts

In diesem Artikelbeispiel wird der spezifische Co...

Implementierungsbeispiel zum Hochladen mehrerer Anhänge in Vue

Inhaltsverzeichnis Vorwort Kerncode Datei zeigt e...

Vue ElementUI implementiert einen asynchronen Ladebaum

In diesem Artikelbeispiel wird der spezifische Co...

So erstellen Sie ein CentOS-Basisimage

Vorwort Derzeit ist das von meiner Firma verwende...

Ubuntu kompiliert Kernelmodule und der Inhalt wird im Systemprotokoll angezeigt

Inhaltsverzeichnis 1.Linux-Anmeldeschnittstelle 2...