J'essaie d'utiliser une instruction IF
dans une requête de sélection MySQL.
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?
La construction IF/THEN/ELSE que vous utilisez n’est valable que dans les procédures et les 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 de la sorte.
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 différentes données en fonction de certaines conditions, mais pas tellement à utiliser 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 la 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 MySQL "conditions de recherche de clause":
select * from penguins
where 1=1
having (if (true, 2, 3)) = id
-->1 rico
tilisez une instruction IF avec une colonne utilisée dans la liste de sélection pour prendre une décision:
select (if (id = 2, -1, 1)) item
from penguins
where 1=1
--> 1
--> -1
--> 1
Si les instructions incorporées dans les requêtes SQL sont une mauvaise "odeur de code". Le code incorrect a un "WTF par minute" élevé lors de la révision du code. C'est l'une de ces choses. Si je vois ceci en production avec votre nom, je ne vous aimerai pas automatiquement.
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