Heim >Datenbank >MySQL-Tutorial >Wie behebt man den ORA-00904-Fehler bei der Verwendung von CASE-Ausdrücken in WHERE-Klauseln?

Wie behebt man den ORA-00904-Fehler bei der Verwendung von CASE-Ausdrücken in WHERE-Klauseln?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 08:50:40122Durchsuche

How to Resolve ORA-00904 Error When Using CASE Expressions in WHERE Clauses?

Ü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!

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