Oracle
 sql >> Database >  >> RDS >> Oracle

SQL non riconosce l'alias di colonna nella clausola where

Un alias può essere utilizzato in un elenco di selezione di query per assegnare a una colonna un nome diverso. Puoi utilizzare l'alias nelle clausole GROUP BY, ORDER BY o HAVING per fare riferimento alla colonna.

L'SQL standard non consente i riferimenti agli alias di colonna in una clausola WHERE. Questa limitazione è imposta perché quando viene valutata la clausola WHERE, il valore della colonna potrebbe non essere stato ancora determinato.

Quindi, la seguente query è illegale:

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 di colonna è consentito in:

  • GRUPPO PER
  • ORDINA PER
  • AVERE

Puoi fare riferimento all'alias di colonna nella clausola WHERE nei seguenti casi:

  1. Sub-query
  2. Espressione di tabella comune (CTE)

Ad esempio,

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>