Verwenden einer IF-Anweisung in einer MySQL SELECT-Abfrage
Ich bin versucht, eine IF
- Anweisung in eine MySQL-select-Abfrage.
Ich eine Fehlermeldung, nach der AND
Anweisung, wo die ersten 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;
Warum funktioniert das nicht und was ist die richtige Art und Weise zu tun, eine IF-Anweisung in einer MySQL-Abfrage?
InformationsquelleAutor der Frage Santosh | 2011-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den IF/then/ELSE-Konstrukt, die Sie verwenden ist nur gültig in gespeicherten Prozeduren und Funktionen. Auf Ihre Anfrage müssen umstrukturiert werden, weil Sie nicht verwenden können die WENN () - Funktion, Steuerung des Datenflusses der WHERE-Klausel wie dieser.
Die WENN () - Funktion kann in Abfragen verwendet werden, ist in Erster Linie dazu genutzt werden, um in den SELECT-Teil der Abfrage für die Auswahl der verschiedenen Daten basierend auf bestimmten Bedingungen, die nicht so viel verwendet werden, im WHERE-Teil der Abfrage:
InformationsquelleAutor der Antwort davidethell
Wie Sie eine IF-Anweisung in der MySQL "select-Liste":
Wie Sie eine IF-Anweisung in die MySQL-Suchbedingung der where-Klausel-Liste:
Wie Sie eine IF-Anweisung in der MySQL "having-Klausel Suchbedingungen":
Verwenden Sie eine IF-Anweisung mit einer Spalte in der select-Liste, eine Entscheidung zu treffen:
If-Anweisungen eingebettet in SQL-Abfragen ist eine schlechte "code smell". Schlechter code hat eine hohe "WTF per minute" während der code-review. Dies ist eines dieser Dinge. Wenn ich sehe das in der Produktion mit Ihrem Namen, werde ich automatisch nicht wie Sie.
InformationsquelleAutor der Antwort Eric Leschinski
versuchen, diesen code für mich gearbeitet
InformationsquelleAutor der Antwort Ameen Maheen