Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL erkennt den Spaltenalias in der Where-Klausel nicht

Ein Alias ​​kann in einer Abfrageauswahlliste verwendet werden, um einer Spalte einen anderen Namen zu geben. Sie können den Alias ​​in den Klauseln GROUP BY, ORDER BY oder HAVING verwenden, um auf die Spalte zu verweisen.

Standard-SQL verbietet Verweise auf Spaltenaliase in einer WHERE-Klausel. Diese Einschränkung wird auferlegt, da bei der Auswertung der WHERE-Klausel der Spaltenwert möglicherweise noch nicht bestimmt wurde.

Die folgende Abfrage ist also illegal:

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>

Der Spaltenalias ist erlaubt in:

  • GRUPPE NACH
  • BESTELLEN VON
  • HABEN

Sie können in den folgenden Fällen auf den Spaltenalias in der WHERE-Klausel verweisen:

  1. Unterabfrage
  2. Gemeinsamer Tabellenausdruck (CTE)

Zum Beispiel

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>