Dans MySQL, la construction CASE..WHEN permet aux utilisateurs d'évaluer plusieurs conditions et de renvoyer un résultat correspondant. Cependant, un problème courant survient lors de l'utilisation de CASE avec des conditions de recherche et une colonne numérique.
Requête et problème d'origine :
Dans une requête, l'instruction CASE évalue le prix base_price. colonne, où base_price est défini comme decimal(8,0):
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;
Le résultat de cette requête renvoie des résultats inattendus où tous sont sélectionnés les lignes, où base_price est 0, renvoient la condition 3 :
3 0 3 0 3 0 3 0 3 0
Solution :
Pour corriger ce problème, la spécification de la colonne après CASE doit être supprimée. Dans la deuxième forme de CASE, le nom de la colonne n'est pas obligatoire après le mot CASE si vous utilisez des conditions de recherche.
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;
Explication :
CASE a deux types différents formulaires : le premier formulaire spécifie le nom de la colonne, contrairement au deuxième formulaire. L'utilisation correcte du deuxième formulaire lors de l'évaluation des conditions de recherche permet à MySQL d'évaluer correctement les conditions et de renvoyer les résultats escomptés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!