Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menggunakan Alias ​​​​dalam klausa WHERE

Ini tidak mungkin secara langsung, karena secara kronologis, MANA terjadi sebelum SELECT, yang selalu merupakan langkah terakhir dalam rantai eksekusi.

Anda dapat melakukan sub-pilih dan memfilternya:

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

Sedikit info menarik pindah dari komentar:

Seharusnya tidak ada hit kinerja. Oracle tidak perlu mewujudkan kueri dalam sebelum menerapkan kondisi luar -- Oracle akan mempertimbangkan untuk mengubah kueri ini secara internal dan menekan predikat ke dalam kueri dalam dan akan melakukannya jika hemat biaya. – Gua Justin



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Temukan tahun berturut-turut maksimum untuk setiap ID dalam tabel (Oracle SQL)

  2. Cara mengulangi rentang tanggal di PL/SQL

  3. Pemasangan paket RODBC/ROracle di OS X Mavericks

  4. ORA-12505, TNS:pendengar saat ini tidak mengetahui SID yang diberikan dalam koneksi des

  5. SQL:Parse string yang dipisahkan koma dan gunakan sebagai join