Verwenden von IF-Anweisungen in MySQL-SELECT-Abfragen
Bei dieser Frage versucht der Benutzer, eine IF-Anweisung innerhalb einer MySQL-SELECT-Abfrage zu verwenden, trifft jedoch auf Folgendes ein Fehler. Um das Problem zu verstehen und den richtigen Ansatz zu finden, schauen wir uns den Zweck und die Einschränkungen von IF-Anweisungen in MySQL an.
Falsche Verwendung von IF-Anweisungen in der WHERE-Klausel
Die Der Fehler entsteht durch den Versuch, den Ablauf der WHERE-Klausel mit der IF-Anweisung zu steuern. In MySQL wird die IF-Anweisung hauptsächlich im SELECT-Teil einer Abfrage verwendet, um Daten bedingt auszuwählen. Es kann nicht verwendet werden, um die Zeilen zu bestimmen, die die WHERE-Bedingung erfüllen.
Richtige Syntax für IF-Anweisungen in SELECT-Abfragen
Anstatt IF-Anweisungen in der WHERE-Klausel zu verwenden, Sie können bedingte Ausdrücke innerhalb der SELECT-Anweisung verwenden, um verschiedene Werte basierend auf bestimmten Kriterien auszuwählen. Zum Beispiel:
SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS FROM ... WHERE ...
In diesem Beispiel wird die Funktion IF() verwendet, um verschiedene Ergebnisse basierend auf dem Wert von JQ.COURSE_ID innerhalb der SELECT-Klausel auszuwählen.
Umschreiben die Abfrage
Um den Fehler zu beheben, sollte die Abfrage umgeschrieben werden, um bedingte Ausdrücke im SELECT-Teil zu verwenden. Die folgende modifizierte Abfrage erreicht dieselbe Logik:
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;
Durch die Verwendung von CASE-Ausdrücken innerhalb der SELECT-Klausel wertet die Abfrage die Bedingungen korrekt aus und wählt die entsprechenden Werte aus, ohne dass IF-Anweisungen in der WHERE-Klausel erforderlich sind.
Das obige ist der detaillierte Inhalt vonWie verwende ich IF-Anweisungen korrekt in MySQL-SELECT-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!