Maison  >  Article  >  base de données  >  Comment utiliser correctement les instructions IF dans les requêtes MySQL SELECT ?

Comment utiliser correctement les instructions IF dans les requêtes MySQL SELECT ?

DDD
DDDoriginal
2024-10-28 13:31:02662parcourir

 How to Use IF Statements Correctly in MySQL SELECT Queries?

Utilisation des instructions IF dans les requêtes MySQL SELECT

Dans cette question, l'utilisateur tente d'utiliser une instruction IF dans une requête MySQL SELECT mais rencontre une erreur. Pour comprendre le problème et proposer l'approche correcte, examinons l'objectif et les limites des instructions IF dans MySQL.

Utilisation incorrecte des instructions IF dans la clause WHERE

Le L'erreur résulte de la tentative d'utilisation de l'instruction IF pour contrôler le flux de la clause WHERE. Dans MySQL, l'instruction IF est principalement utilisée dans la partie SELECT d'une requête pour sélectionner des données de manière conditionnelle. Il ne peut pas être utilisé pour déterminer les lignes qui satisfont à la condition WHERE.

Syntaxe appropriée pour les instructions IF dans les requêtes SELECT

Au lieu d'utiliser les instructions IF dans la clause WHERE, vous pouvez utiliser des expressions conditionnelles dans l'instruction SELECT pour sélectionner différentes valeurs en fonction de critères spécifiques. Par exemple :

SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS
FROM ...
WHERE ...

Dans cet exemple, la fonction IF() est utilisée pour sélectionner différents résultats en fonction de la valeur de JQ.COURSE_ID dans la clause SELECT.

Réécriture la requête

Pour corriger l'erreur, la requête doit être réécrite pour utiliser des expressions conditionnelles dans la partie SELECT. La requête modifiée suivante accomplit la même logique :

SELECT J.JOB_ID,E.COMPANY_NAME,J.JOB_DESC,JT.JOBTYPE_NAME,J.COMPENSATION,ST.STATE_NAME,MC.METRO_CITY_NAME,I.INDUSTRY_NAME,
 J.JOB_CONTACT_PERSON,J.DT_INSRT,J.JOB_TITLE,J.JOB_EXP_DATE,
 CASE
 WHEN JQ.COURSE_ID=0 THEN
    CASE
    WHEN JQ.DEGREE_ID=0 THEN J.SKILLS
    ELSE JQ.DEGREE_ID
    END
 ELSE
    CASE
    WHEN JQ.DEGREE_ID=0 THEN J.SKILLS
    ELSE JQ.DEGREE_ID
    END
 END AS Conditional_Column
 FROM JOBS J 
 JOIN EMPLOYER E ON J.COMPANY_ID=E.COMPANY_ID 
 JOIN LOOKUP_JOBTYPE JT ON J.JOB_TYPE=JT.JOBTYPE_ID
 JOIN LOOKUP_STATE ST ON J.STATE_ID=ST.STATE_ID
 JOIN JOBS_LOCATION JL ON J.JOB_ID=JL.JOB_ID
 JOIN LOOKUP_METRO_CITY MC ON JL.METRO_CITY_ID=MC.METRO_CITY_ID
 JOIN LOOKUP_INDUSTRY I ON J.INDUSTRY_ID=I.INDUSTRY_ID 
 JOIN JOBS_QUALIFICATION JQ ON J.JOB_ID=JQ.JOB_ID 
 JOIN LOOKUP_DEGREE_QUALIFICATION LDQ ON LDQ.QUALIFICATION_ID = JQ.QUALIFICATION_ID
 WHERE  J.ACTIVE='Y' AND J.DT_INSRT > COALESCE(pEmailSntDt,DATE_SUB(SYSDATE(),INTERVAL 4 DAY))                        
GROUP BY J.JOB_ID ORDER BY J.DT_INSRT DESC;

En utilisant des expressions CASE dans la clause SELECT, la requête évalue correctement les conditions et sélectionne les valeurs appropriées sans avoir besoin d'instructions IF dans la clause WHERE.

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