sql >> データベース >  >> RDS >> Oracle

SQLがwhere句の列エイリアスを認識しない

    クエリ選択リストでエイリアスを使用して、列に別の名前を付けることができます。 GROUP BY、ORDER BY、またはHAVING句のエイリアスを使用して、列を参照できます。

    標準SQLでは、WHERE句での列エイリアスへの参照は許可されていません。 WHERE句が評価されるときに、列の値がまだ決定されていない可能性があるため、この制限が課せられます。

    したがって、次のクエリは不正です:

    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>
    

    列エイリアスは次の場所で許可されています:

    • グループ化
    • 注文者
    • 持っている

    次の場合、WHERE句で列エイリアスを参照できます。

    1. サブクエリ
    2. 共通テーブル式(CTE)

    たとえば、

    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>
    


    1. SQLiteで2つのタイムスタンプの差を計算する方法

    2. 外部キーを持つテーブル列をNULLにすることはできますか?

    3. 1つのクエリで複数の行を挿入するMySQL

    4. SQLServerパフォーマンス監視ツールを使用することでメリットが得られる3つの領域