sql >> Databáze >  >> RDS >> Oracle

Použití aliasu v klauzuli WHERE

To není možné přímo, protože chronologicky KDE se děje před SELECT, což je vždy poslední krok v řetězci provádění.

Můžete provést podvýběr a filtrovat:

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

Zajímavé informace přesunuty z komentářů:

Nemělo by dojít k žádnému zásahu do výkonu. Oracle nemusí před aplikací vnějších podmínek zhmotňovat vnitřní dotazy – Oracle zváží interní transformaci tohoto dotazu a vloží predikát dolů do vnitřního dotazu a učiní tak, pokud to bude nákladově efektivní. – Justin Cave



  1. Vyberte počet (*) z více tabulek

  2. Jedinečné omezení s podmínkami v MYSQL

  3. Jak vyřešit ORA-29283:neplatná operace se souborem

  4. Oracle Database Testing Challenge – Porovnejte data schématu