Maison > base de données > tutoriel mysql > Comment puis-je utiliser une colonne d'expression CASE dans une clause WHERE d'Oracle 10.2 ?

Comment puis-je utiliser une colonne d'expression CASE dans une clause WHERE d'Oracle 10.2 ?

Patricia Arquette
Libérer: 2025-01-03 21:13:40
original
812 Les gens l'ont consulté

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

Utilisation d'une « colonne d'expression de cas » dans la clause WHERE

Oracle 10.2 SQL pose un défi lorsque vous tentez d'utiliser une « colonne d'expression de cas » dans la clause WHERE. L'erreur "ORA-00904 : "%s : identifiant invalide" est rencontrée en raison de l'ordre logique du traitement des instructions SQL.

Ordre logique du traitement SQL

Les instructions SQL sont traitées comme suit séquence :

  1. FROM : sélection de table et combinaisons de lignes
  2. WHERE : ligne filtrage
  3. GROUP BY : regroupement de lignes
  4. HAVING : filtrage de lignes
  5. SELECT : récupération de colonnes
  6. DISTINCT : suppression de lignes en double
  7. UNION /EXCEPT/INTERSECT : manipulation du résultat de la sous-requête
  8. ORDER BY : Tri des lignes

Cause de l'erreur

Dans la clause WHERE de la requête d'origine :

SELECT ename
, job
, CASE deptno
WHEN 10
THEN 'ACCOUNTS'
WHEN 20
THEN 'SALES'
ELSE 'UNKNOWN'
END AS department
FROM emp
WHERE department = 'SALES'
Copier après la connexion

La colonne 'department', générée par l'expression CASE , n'existe pas encore lors de l'évaluation de la clause WHERE. Par conséquent, la clause WHERE ne peut pas l'utiliser à des fins de comparaison.

Solution 1 : Boîtier de sous-requête

Pour surmonter cette limitation, placez la requête dans une sous-requête :

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' ;
Copier après la connexion

Solution 2 : dupliquer l'expression CASE dans la clause WHERE

Vous pouvez également dupliquer l'expression CASE dans la clause WHERE :

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' ;
Copier après la connexion

Simplifié Option

Dans les cas où la condition de la clause WHERE correspond directement à un numéro de département spécifique, une option simplifiée est possible :

SELECT ename
, job
, 'SALES' AS department
FROM emp
WHERE deptno = 20 ;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal