sql >> Base de Datos >  >> RDS >> Oracle

Uso de un alias en una cláusula WHERE

Esto no es posible directamente, porque cronológicamente, DONDE sucede antes SELECT, que siempre es el último paso en la cadena de ejecución.

Puede hacer una subselección y filtrar en ella:

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

Un poco de información interesante se movió de los comentarios:

No debería haber ningún impacto en el rendimiento. Oracle no necesita materializar las consultas internas antes de aplicar las condiciones externas:Oracle considerará transformar esta consulta internamente e insertará el predicado en la consulta interna y lo hará si es rentable. – Justin Cueva