Heim >Datenbank >MySQL-Tutorial >Wie verwende ich eine CASE-Ausdrucksspalte in einer Oracle 10.2 WHERE-Klausel?

Wie verwende ich eine CASE-Ausdrucksspalte in einer Oracle 10.2 WHERE-Klausel?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 10:56:39523Durchsuche

How to Use a CASE Expression Column in an Oracle 10.2 WHERE Clause?

Verwenden einer CASE-Ausdrucksspalte in einer WHERE-Klausel in Oracle 10.2

Wenn Sie eine CASE-Ausdrucksspalte in einer WHERE-Klausel in Oracle 10.2 verwenden, können Sie dies tun Es tritt der Fehler „ORA-00904: ungültiger Bezeichner“ auf, wenn die CASE-Ausdrucksspalte in der Abfrage noch nicht definiert ist. Dies liegt daran, dass in Oracle 10.2 die WHERE-Klausel vor der SELECT-Klausel ausgewertet wird.

Lösung 1: Schließen Sie die Abfrage in eine andere Abfrage ein

Um diese Einschränkung zu überwinden, müssen Sie kann die Abfrage in eine andere Abfrage einschließen, die die CASE-Ausdrucksspalte definiert:

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 Sie die Berechnung in der WHERE-Bedingung

Alternativ können Sie die Berechnung des CASE-Ausdrucks in der WHERE-Bedingung duplizieren:

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 Version

Sie können die Abfrage auch vereinfachen, indem Sie einfach die Vertriebsabteilung aus Mitarbeitern mit einer Abteilungsnummer gleich auswählen 20:

SELECT ename
     , job
     , 'SALES' AS department
FROM emp
WHERE deptno = 20;

Das obige ist der detaillierte Inhalt vonWie verwende ich eine CASE-Ausdrucksspalte in einer Oracle 10.2 WHERE-Klausel?. 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