Heim >Datenbank >MySQL-Tutorial >Wie verwende ich CASE WHEN in MySQL mit numerischen Spalten und Suchbedingungen richtig?
In MySQL ermöglicht das CASE..WHEN-Konstrukt Benutzern, mehrere Bedingungen auszuwerten und ein entsprechendes Ergebnis zurückzugeben. Bei der Verwendung von CASE mit Suchbedingungen und einer numerischen Spalte tritt jedoch ein häufiges Problem auf.
Ursprüngliche Abfrage und Problem:
In einer Abfrage wertet die CASE-Anweisung den Basispreis aus Spalte, in der base_price als dezimal (8,0) definiert ist:
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
Das Ergebnis dieser Abfrage gibt unerwartete Ergebnisse zurück, wenn alle ausgewählt sind Zeilen, in denen base_price 0 ist, geben die Bedingung 3 zurück:
3 0 3 0 3 0 3 0 3 0
Lösung:
Um dieses Problem zu beheben, sollte die Spaltenspezifikation nach CASE entfernt werden. In der zweiten Form von CASE ist der Spaltenname nach dem Wort CASE nicht erforderlich, wenn Sie Suchbedingungen verwenden.
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0;
Erklärung:
CASE hat zwei verschiedene Formulare: Das erste Formular gibt den Spaltennamen an, das zweite Formular jedoch nicht. Die korrekte Verwendung der zweiten Form bei der Auswertung von Suchbedingungen ermöglicht es MySQL, die Bedingungen korrekt auszuwerten und die beabsichtigten Ergebnisse zurückzugeben.
Das obige ist der detaillierte Inhalt vonWie verwende ich CASE WHEN in MySQL mit numerischen Spalten und Suchbedingungen richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!