Maison >base de données >tutoriel mysql >Pourquoi mon instruction MySQL CASE WHEN choisit-elle la mauvaise condition lorsque « base_price » est 0 ?

Pourquoi mon instruction MySQL CASE WHEN choisit-elle la mauvaise condition lorsque « base_price » est 0 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-25 02:02:09899parcourir

Why Does My MySQL CASE WHEN Statement Choose the Wrong Condition When `base_price` is 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn