Utilisation D'une instruction IF dans une requête MySQL SELECT
J'essaie d'utiliser une instruction IF
dans une requête MySQL select.
Je reçois une erreur après l'instruction AND
où le premier IF
.
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,J.SKILLS
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))
AND
IF(JQ.COURSE_ID=0)
THEN
IF(JQ.DEGREE_ID=0)
THEN J.SKILLS LIKE CONCAT('%', pSkills,'%')
ELSE
JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%')
END IF
ELSE
JQ.COURSE_ID=pCourseId OR IF(JQ.DEGREE_ID=0)
THEN
J.SKILLS LIKE CONCAT('%', pSkills,'%')
ELSE
JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%')
END IF
END IF
GROUP BY J.JOB_ID ORDER BY J.DT_INSRT DESC;
Pourquoi cela ne fonctionne-t-il pas et quelle est la bonne façon de faire une instruction IF dans une requête MySQL?
3 réponses
La construction IF/THEN/ELSE que vous utilisez n'est valide que dans les procédures et fonctions stockées. Votre requête devra être restructurée car vous ne pouvez pas utiliser la fonction IF() pour contrôler le flux de la clause WHERE comme ceci.
La fonction IF() qui peut être utilisée dans les requêtes est principalement destinée à être utilisée dans la partie SELECT de la requête pour sélectionner des données différentes en fonction de certaines conditions, pas tellement pour être utilisée dans la partie WHERE de la requête:
SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS
FROM ...
WHERE ...
Comment utiliser une instruction IF dans la "liste de sélection "MySQL":
select if (1>2, 2, 3); //returns 3
select if(1<2,'yes','no'); //returns yes
SELECT IF(STRCMP('test','test1'),'no','yes'); //returns no
Comment utiliser une instruction IF dans la liste des conditions de recherche de clause MySQL where:
create table penguins (id int primary key auto_increment, name varchar(100))
insert into penguins (name) values ('rico')
insert into penguins (name) values ('kowalski')
insert into penguins (name) values ('skipper')
select * from penguins where 3 = id
-->3 skipper
select * from penguins where (if (true, 2, 3)) = id
-->2 kowalski
Comment utiliser une instruction IF dans les conditions de recherche de clause MySQL "having":
select * from penguins
where 1=1
having (if (true, 2, 3)) = id
-->1 rico
Utiliser une instruction if avec une colonne utilisée dans la liste de sélection de prendre une décision:
select (if (id = 2, -1, 1)) item
from penguins
where 1=1
--> 1
--> -1
--> 1
Si les instructions intégrées dans les requêtes SQL sont une mauvaise "odeur de code". Mauvais code a haute " WTF par minute " pendant la révision du code. C'est une de ces choses. Si je vois cela en production avec votre nom dessus, je vais automatiquement ne pas vous aimer.
Essayez ce code a fonctionné pour moi
SELECT user_display_image AS user_image,
user_display_name AS user_name,
invitee_phone,
(CASE WHEN invitee_status = 1 THEN "attending"
WHEN invitee_status = 2 THEN "unsure"
WHEN invitee_status = 3 THEN "declined"
WHEN invitee_status = 0 THEN "notreviwed"
END) AS invitee_status
FROM your_table