Heim >Datenbank >MySQL-Tutorial >Wie behebt man den ORA-00904-Fehler bei der Verwendung von CASE-Ausdrücken in WHERE-Klauseln?
Überwindung von ORA-00904: Verwendung von „Case-Ausdrucksspalte“ in der WHERE-Klausel
Beim Versuch, einen Case-Ausdruck als Spalte in zu verwenden WHERE-Klausel, ORA-00904 kann aufgrund der logischen Verarbeitungsreihenfolge von SQL auftreten. Die WHERE-Klausel wird vor der SELECT-Klausel ausgewertet, sodass es unmöglich ist, Spalten zu verwenden, die im Case-Ausdruck von SELECT definiert sind.
Lösung 1: Verschachtelte Abfrage
Um dieses Problem zu beheben , schließen Sie die ursprüngliche Abfrage in eine verschachtelte Abfrage ein:
SELECT * FROM (SELECT ename, job, CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp ) tmp WHERE department = 'SALES';
Lösung 2: Duplizieren Berechnung
Alternativ duplizieren Sie den Fallausdruck in der WHERE-Bedingung selbst:
SELECT ename, job, CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END = 'SALES';
Vereinfachte Abfrage
Für den konkret dargestellten Fall , kann auch eine vereinfachte Abfrage verwendet werden:
SELECT ename, job, 'SALES' AS department FROM emp WHERE deptno = 20;
Das obige ist der detaillierte Inhalt vonWie behebt man den ORA-00904-Fehler bei der Verwendung von CASE-Ausdrücken in WHERE-Klauseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!