Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine CASE-Ausdrucksspalte in der WHERE-Klausel einer Oracle 10.2-Abfrage verwenden?

Wie kann ich eine CASE-Ausdrucksspalte in der WHERE-Klausel einer Oracle 10.2-Abfrage verwenden?

Linda Hamilton
Linda HamiltonOriginal
2025-01-04 22:46:42806Durchsuche

How Can I Use a CASE Expression Column in the WHERE Clause of an Oracle 10.2 Query?

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:

  • FROM: Tabellenauswahl und Zeilenkombinationen
  • WHERE: Zeile Filtern basierend auf Bedingungen
  • GROUP BY: Zeilengruppierung
  • HAVING: Zusätzliche Zeilenfilterung
  • SELECT: Spaltenauswahl
  • DISTINCT: Doppelte Zeilenentfernung
  • UNION/EXCEPT/INTERSECT: Unterabfrageoperationen
  • ORDER BY: Zeilenreihenfolge

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!

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