Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine CASE-Ausdrucksspalte in der WHERE-Klausel einer Oracle 10.2-Abfrage verwenden?
Verwendung von „Case Expression Column“ in einer WHERE-Klausel in Oracle 10.2
In Oracle 10.2 tritt beim Versuch ein ORA-00904-Fehler auf Verwenden Sie eine Case-Ausdrucksspalte in einer WHERE-Klausel. Dies liegt an der logischen Verarbeitungsreihenfolge von SQL-Anweisungen, bei der WHERE-Bedingungen ausgewertet werden, bevor Spalten ausgewählt werden.
Fehlererklärung:
SQL-Anweisungen werden im logisch verarbeitet folgender Reihenfolge:
In der bereitgestellten Abfrage versucht die WHERE-Klausel, die im CASE-Ausdruck berechnete Abteilungsspalte zu verwenden. Diese Spalte wird jedoch erst nach der Ausführung der WHERE-Klausel ausgefüllt, was zu dem Fehler führt.
Lösung 1: Einschließen der Unterabfrage
Um diese Einschränkung zu umgehen, schließen Sie das Original ein Abfrage in einer Unterabfrage und wählen Sie daraus die gewünschten Spalten aus:
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: Bedingt Replikation
Replizieren Sie den CASE-Ausdruck in der WHERE-Bedingung:
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' ;
Alternative Lösung:
Wenn möglich, erwägen Sie die Verwendung einer einfacheren Lösung Abfrage:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
Das obige ist der detaillierte Inhalt vonWie kann ich eine CASE-Ausdrucksspalte in der WHERE-Klausel einer Oracle 10.2-Abfrage verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!