Heim  >  Artikel  >  Datenbank  >  Wie verwende ich IF-Anweisungen korrekt in MySQL-SELECT-Abfragen?

Wie verwende ich IF-Anweisungen korrekt in MySQL-SELECT-Abfragen?

DDD
DDDOriginal
2024-10-28 13:31:02662Durchsuche

 How to Use IF Statements Correctly in MySQL SELECT Queries?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn