Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL ne reconnaît pas l'alias de colonne dans la clause where

Un alias peut être utilisé dans une liste de sélection de requête pour donner un nom différent à une colonne. Vous pouvez utiliser l'alias dans les clauses GROUP BY, ORDER BY ou HAVING pour faire référence à la colonne.

Le SQL standard interdit les références aux alias de colonne dans une clause WHERE. Cette restriction est imposée car lorsque la clause WHERE est évaluée, la valeur de la colonne n'a peut-être pas encore été déterminée.

Ainsi, la requête suivante est illégale :

SQL> SELECT empno AS employee, deptno AS department, sal AS salary
  2  FROM emp
  3  WHERE employee = 7369;
WHERE employee = 7369
      *
ERROR at line 3:
ORA-00904: "EMPLOYEE": invalid identifier


SQL>

L'alias de colonne est autorisé dans :

  • REGROUPER PAR
  • TRIER PAR
  • AVOIR

Vous pouvez faire référence à l'alias de colonne dans la clause WHERE dans les cas suivants :

  1. Sous-requête
  2. Expression de table commune (CTE)

Par exemple,

SQL> SELECT * FROM
  2  (
  3  SELECT empno AS employee, deptno AS department, sal AS salary
  4  FROM emp
  5  )
  6  WHERE employee = 7369;

  EMPLOYEE DEPARTMENT     SALARY
---------- ---------- ----------
      7369         20        800

SQL> WITH DATA AS(
  2  SELECT empno AS employee, deptno AS department, sal AS salary
  3  FROM emp
  4  )
  5  SELECT * FROM DATA
  6  WHERE employee = 7369;

  EMPLOYEE DEPARTMENT     SALARY
---------- ---------- ----------
      7369         20        800

SQL>