Maison >base de données >tutoriel mysql >Comment utiliser correctement les instructions IF dans les requêtes MySQL SELECT ?
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!