then - mysql if exists
Usar una instrucción IF en una consulta MySQL SELECT (3)
Estoy tratando de usar una declaración IF
en una consulta de selección de MySQL.
Recibo un error después de la instrucción AND
donde aparece el primer 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;
¿Por qué esto no funciona y cuál es la forma correcta de hacer una declaración IF en una consulta MySQL?
La construcción IF / THEN / ELSE que está utilizando solo es válida en procedimientos y funciones almacenados. Su consulta tendrá que ser reestructurada porque no puede usar la función IF () para controlar el flujo de la cláusula WHERE de esta manera.
La función IF () que se puede usar en las consultas está destinada principalmente a ser utilizada en la parte SELECT de la consulta para seleccionar datos diferentes en función de ciertas condiciones, no tanto para ser utilizada en la parte WHERE de la consulta:
SELECT IF(JQ.COURSE_ID=0, ''Some Result If True'', ''Some Result If False''), OTHER_COLUMNS
FROM ...
WHERE ...
intenta este código funcionó para mí
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
Cómo usar una declaración IF en la "lista de selección" de 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
Cómo utilizar una declaración IF en la lista de condiciones de búsqueda de cláusulas 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
Cómo usar una instrucción IF en MySQL "que tiene condiciones de búsqueda de cláusulas":
select * from penguins
where 1=1
having (if (true, 2, 3)) = id
-->1 rico
Use una declaración IF con una columna utilizada en la lista de selección para tomar una decisión:
select (if (id = 2, -1, 1)) item
from penguins
where 1=1
--> 1
--> -1
--> 1
Si las declaraciones incrustadas en las consultas SQL es un mal "olor a código". El código incorrecto tiene un alto "WTF por minuto" durante la revisión del código. Esta es una de esas cosas. Si veo esto en producción con tu nombre, automáticamente no te agradaré.