sql >> Databasteknik >  >> RDS >> Oracle

Använda ett Alias ​​i en WHERE-sats

Detta är inte möjligt direkt, för kronologiskt händer WHERE före SELECT, som alltid är det sista steget i exekveringskedjan.

Du kan göra ett underval och filtrera på det:

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

Intressant information flyttades upp från kommentarerna:

Det ska inte finnas någon prestandaträff. Oracle behöver inte materialisera inre frågor innan de tillämpar yttre villkor -- Oracle kommer att överväga att omvandla denna fråga internt och trycka ner predikatet i den inre sökningen och kommer att göra det om det är kostnadseffektivt. – Justin Cave



  1. Hur använder man tabellvariabel i en dynamisk SQL-sats?

  2. Hur man klona användare i Oracle

  3. Hur man skapar en tabell endast om den inte finns i PostgreSQL

  4. Konvertera en juliansk dag till ett datum i PostgreSQL