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

Tiefgreifendes Verständnis der Verwendung von Vue

Inhaltsverzeichnis Verstehen Sie das Kernkonzept ...

Vue erzielt den Top-Effekt durch V-Show

html <div Klasse="nach oben" v-show=...

So analysieren Sie den SQL-Ausführungsplan in MySQL mit EXPLAIN

Vorwort In MySQL können wir den Befehl EXPLAIN ve...

Implementierung der Docker-Batch-Container-Orchestrierung

Einführung Der Dockerfile-Build-Ausführungsvorgan...

Analyse der Vorteile von path.join() in Node.js

Sie fragen sich möglicherweise, warum Sie die Met...

Auszeichnungssprache - Anker

Zurück: Markup Language - Phrasenelemente Original...

Vue erzielt einen nahtlosen Karusselleffekt (Laufschrift)

In diesem Artikelbeispiel wird der spezifische Co...

HTML+CSS zum Erstellen eines einfachen Fortschrittsbalkens

1. HTML-Code Code kopieren Der Code lautet wie fo...

Sicherheitskonfigurationsstrategie für CentOS-Server

In letzter Zeit wurde der Server häufig mit Brute...

Detaillierte Erläuterung der MySQL Master-Slave-Datenbankkonstruktionsmethode

Dieser Artikel beschreibt, wie man eine MySQL Mas...

Detaillierte Erläuterung der Redis-Master-Slave-Replikationspraxis mit Docker

Inhaltsverzeichnis 1. Hintergrund 2. Bedienungssc...

Detailliertes Tutorial zur Installation von Centos8 auf VMware

Offizielle Website-Adresse von CentOS https://www...