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

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

Patricia Arquette
Freigeben: 2025-01-03 21:13:40
Original
812 Leute haben es durchsucht

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

Verwendung einer „Case-Ausdrucksspalte“ in der WHERE-Klausel

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.

Logische Reihenfolge der SQL-Verarbeitung

SQL-Anweisungen werden im Folgenden verarbeitet Reihenfolge:

  1. FROM: Tabellenauswahl und Zeilenkombinationen
  2. WHERE: Zeile Filterung
  3. GROUP BY: Zeilengruppierung
  4. HAVING: Zeilenfilterung
  5. SELECT: Spaltenabruf
  6. DISTINCT: Doppelte Zeilenentfernung
  7. UNION /EXCEPT/INTERSECT: Manipulation des Unterabfrageergebnisses
  8. ORDER BY: Zeilensortierung

Fehlerursache

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'
Nach dem Login kopieren

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.

Lösung 1: Unterabfrage Einschluss

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' ;
Nach dem Login kopieren

Lösung 2: CASE-Ausdruck in der WHERE-Klausel duplizieren

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' ;
Nach dem Login kopieren

Vereinfacht Option

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 ;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage