30

IFMySQL 選択クエリでステートメント を使用しようとしています。

最初ANDIF.

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;

これが機能しないのはなぜですか? また、MySQL クエリで IF ステートメントを実行する適切な方法は何ですか?

4

3 に答える 3

63

使用している IF/THEN/ELSE 構文は、ストアド プロシージャと関数でのみ有効です。このように IF() 関数を使用して WHERE 句のフローを制御することはできないため、クエリを再構築する必要があります。

クエリで使用できる IF() 関数は、クエリの SELECT 部分で特定の条件に基づいて異なるデータを選択するために使用することを主な目的としており、クエリの WHERE 部分ではあまり使用しません。

SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS
FROM ...
WHERE ...
于 2011-12-09T12:04:03.913 に答える