Oracle
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MyBatis RowBounds не ограничава резултатите от заявката

  2. Как да получа текстово съдържание от BLOB в Oracle SQL

  3. SQL:изтрийте всички данни от всички налични таблици

  4. EM12c вече позволява DB12c за репозитории

  5. как да предоставим привилегия на потребител за конкретна схема?