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

WHERE句でのエイリアスの使用

    時系列で、WHEREはに発生するため、これを直接行うことはできません。 SELECT、これは常に実行チェーンの最後のステップです。

    副選択を行ってフィルタリングすることができます:

    SELECT * FROM
    (
      SELECT A.identifier
        , A.name
        , TO_NUMBER(DECODE( A.month_no
          , 1, 200803 
          , 2, 200804 
          , 3, 200805 
          , 4, 200806 
          , 5, 200807 
          , 6, 200808 
          , 7, 200809 
          , 8, 200810 
          , 9, 200811 
          , 10, 200812 
          , 11, 200701 
          , 12, 200702
          , NULL)) as MONTH_NO
        , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
      FROM table_a A
        , table_b B
      WHERE A.identifier = B.identifier
    ) AS inner_table
    WHERE 
      MONTH_NO > UPD_DATE
    

    コメントから興味深い情報が上に移動しました:

    パフォーマンスに影響はないはずです。Oracleは、外部条件を適用する前に内部クエリを実体化する必要はありません。Oracleは、このクエリを内部で変換することを検討し、述語を内部クエリにプッシュします。費用対効果が高い場合はそうします。 –ジャスティン洞窟



    1. MySQLクエリ-今日から過去30日間の記録

    2. 結果を取得するときにあいまいな列名を解決するにはどうすればよいですか?

    3. SQLite DATEADD()と同等

    4. SQL ServerでJOINを使用してテーブルを更新しますか?