Maison >base de données >tutoriel mysql >Comment résoudre l'erreur ORA-00904 lors de l'utilisation d'expressions CASE dans les clauses WHERE ?
Surmonter ORA-00904 : utilisation de la « colonne d'expression de cas » dans la clause WHERE
Lorsque vous essayez d'utiliser une expression de cas comme colonne dans le La clause WHERE, ORA-00904 peut survenir en raison de l'ordre logique de traitement de SQL. La clause WHERE est évaluée avant la clause SELECT, ce qui rend impossible l'utilisation des colonnes définies dans l'expression de cas de SELECT.
Solution 1 : Requête imbriquée
Pour résoudre ce problème , placez la requête d'origine dans une requête imbriquée :
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 : Dupliquer Calcul
Vous pouvez également dupliquer l'expression de cas dans la condition WHERE elle-même :
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';
Requête simplifiée
Pour le cas spécifique présenté , une requête simplifiée peut également être utilisée :
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!