Oracle 10.2 SQL stellt eine Herausforderung dar, wenn versucht wird, eine „Case-Ausdrucksspalte“ innerhalb der WHERE-Klausel zu verwenden. Der Fehler „ORA-00904: „%s: ungültiger Bezeichner“ ist aufgrund der logischen Reihenfolge der SQL-Anweisungsverarbeitung aufgetreten.
SQL-Anweisungen werden im Folgenden verarbeitet Reihenfolge:
In der WHERE-Klausel der ursprünglichen Abfrage:
SELECT ename , job , CASE deptno WHEN 10 THEN 'ACCOUNTS' WHEN 20 THEN 'SALES' ELSE 'UNKNOWN' END AS department FROM emp WHERE department = 'SALES'
Die Spalte „Abteilung“, generiert durch den CASE-Ausdruck , ist während der Auswertung der WHERE-Klausel noch nicht vorhanden. Daher kann die WHERE-Klausel sie nicht zum Vergleich verwenden.
Um diese Einschränkung zu umgehen, schließen Sie die Abfrage in eine Unterabfrage 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' ;
Alternativ können Sie den CASE-Ausdruck in duplizieren die WHERE-Klausel:
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' ;
In Fällen, in denen die Bedingung der WHERE-Klausel direkt mit einer bestimmten Abteilungsnummer übereinstimmt, ist eine vereinfachte Option möglich:
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
Das obige ist der detaillierte Inhalt vonWie kann ich eine CASE-Ausdrucksspalte in einer Oracle 10.2 WHERE-Klausel verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!