MySQL SELECT クエリでの IF ステートメントの使用
この質問では、ユーザーは MySQL SELECT クエリ内で IF ステートメントを利用しようとしましたが、エラーです。問題を理解し、正しいアプローチを提供するために、MySQL の IF ステートメントの目的と制限について詳しく調べてみましょう。
WHERE 句での IF ステートメントの誤った使用法
このエラーは、IF ステートメントを使用して WHERE 句のフローを制御しようとしたときに発生します。 MySQL では、IF ステートメントは主にクエリの SELECT 部分で条件付きでデータを選択するために使用されます。 WHERE 条件を満たす行を決定するために使用することはできません。
SELECT クエリの IF ステートメントの適切な構文
WHERE 句で IF ステートメントを使用する代わりに、 SELECT ステートメント内で条件式を使用すると、特定の基準に基づいてさまざまな値を選択できます。例:
SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS FROM ... WHERE ...
この例では、IF() 関数を使用して、SELECT 句内の JQ.COURSE_ID の値に基づいて異なる結果を選択します。
書き換えクエリ
エラーを修正するには、SELECT 部分内で条件式を使用するようにクエリを書き直す必要があります。次の変更されたクエリは、同じロジックを実現します。
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;
SELECT 句内で CASE 式を使用することにより、クエリは条件を正しく評価し、WHERE 句内の IF ステートメントを必要とせずに適切な値を選択します。
以上がMySQL SELECT クエリで IF ステートメントを正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。