sql >> Database teknologi >  >> RDS >> Oracle

Brug af et Alias ​​i en WHERE-klausul

Dette er ikke muligt direkte, fordi kronologisk sker WHERE før SELECT, som altid er det sidste trin i udførelseskæden.

Du kan foretage et undervalg og filtrere 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

Interessant lidt information flyttet op fra kommentarerne:

Der bør ikke være noget præstationshit. Oracle behøver ikke at materialisere indre forespørgsler, før de anvender ydre betingelser -- Oracle vil overveje at transformere denne forespørgsel internt og skubbe prædikatet ned i den indre forespørgsel og vil gøre det, hvis det er omkostningseffektivt. – Justin Cave



  1. Hvordan tildeler man et exec-resultat til en sql-variabel?

  2. ODP.NET Managed - Kan ikke finde den anmodede .Net Framework Data Provider

  3. Hvorfor returnerer IS NOT NULL NULL-værdier for en Varchar(max) i SQL Server?

  4. Er der nogle muligheder for et tilslutningsbord for mange-til-mange foreninger?