Maison >base de données >tutoriel mysql >Comment puis-je utiliser une colonne d'expression CASE dans la clause WHERE d'une requête Oracle 10.2 ?
Utilisation de la « colonne d'expression de cas » dans une clause WHERE dans Oracle 10.2
Dans Oracle 10.2, une erreur ORA-00904 se produit lors de la tentative de utilisez une colonne d'expression de cas dans une clause WHERE. Cela est dû à l'ordre de traitement logique des instructions SQL, où les conditions WHERE sont évaluées avant la sélection des colonnes.
Explication de l'erreur :
Les instructions SQL sont traitées logiquement dans le ordre suivant :
Dans la requête fournie, la clause WHERE tente d'utiliser la colonne de département calculée dans l'expression CASE. Cependant, cette colonne n'est renseignée qu'après l'exécution de la clause WHERE, ce qui entraîne l'erreur.
Solution 1 : Enclosure de la sous-requête
Pour surmonter cette limitation, joignez l'original requête dans une sous-requête et sélectionnez-y les colonnes souhaitées :
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' ;
Solution 2 : Conditionnelle Réplication
Répliquer l'expression CASE dans la condition 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' ;
Solution alternative :
Si possible, envisagez d'utiliser une méthode plus simple requête :
SELECT ename , job , 'SALES' AS department FROM emp WHERE deptno = 20 ;
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!