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

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

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 10:56:39529parcourir

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

Utilisation de la colonne d'expression CASE dans la clause WHERE dans Oracle 10.2

Lors de l'utilisation d'une colonne d'expression CASE dans une clause WHERE dans Oracle 10.2, vous pouvez rencontrez l'erreur « ORA-00904 : identifiant invalide » si la colonne d'expression CASE n'est pas encore définie dans la requête. En effet, dans Oracle 10.2, la clause WHERE est évaluée avant la clause SELECT.

Solution 1 : Insérez la requête dans une autre requête

Pour surmonter cette limitation, vous peut enfermer la requête dans une autre requête qui définit la colonne d'expression CASE :

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 le calcul dans la condition WHERE

Vous pouvez également dupliquer le calcul de 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';

Version simplifiée

Vous pouvez également simplifier la requête en sélectionnant simplement le service commercial parmi les salariés dont le numéro de service est égal à 20 :

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