Maison >base de données >tutoriel mysql >Pourquoi mon instruction MySQL CASE WHEN choisit-elle la mauvaise condition lorsque « base_price » est 0 ?
Utiliser correctement l'instruction CASE..WHEN dans MySQL
Dans MySQL, l'instruction CASE..WHEN vous permet d'évaluer différentes conditions et renvoie un résultat spécifique basé sur chaque condition. Cependant, il est important de l'utiliser correctement pour éviter des résultats inattendus.
Question :
Lors de l'exécution d'une instruction CASE..WHEN pour récupérer les enregistrements dont base_price est 0, pourquoi la condition avec une valeur de 3 est-elle choisie à la place de la première condition, même si la valeur spécifiée est 0?
Réponse :
Le problème réside dans la syntaxe de l'instruction CASE. Dans la requête fournie :
SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price < 101 THEN 2 WHEN course_enrollment_settings.base_price > 100 AND course_enrollment_settings.base_price < 201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0
l'instruction évalue les conditions et renvoie la première condition correspondante. Toutefois, la syntaxe est incorrecte car le nom de colonne course_enrollment_settings.base_price est répété immédiatement après l'instruction CASE. Cela conduit à l'instruction comparant son propre résultat avec le reste des conditions, ce qui fait que la 3 condition est toujours choisie.
Pour résoudre le problème, supprimez le nom de la colonne à partir de ce point :
SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... END
L'instruction CASE évalue désormais correctement les conditions sans répétition inutile, garantissant ainsi le résultat attendu.
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!