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 ?

Comment résoudre l'erreur ORA-00904 lors de l'utilisation d'expressions CASE dans les clauses WHERE ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 08:50:40122parcourir

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

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!

Déclaration:
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