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

Sottoseleziona in Oracle

In Oracle, le sottoquery possono vedere solo i valori delle query padre a un livello di profondità. Dato che hai due selezioni nidificate, quella interna non può vedere i valori di quella esterna.

Potresti prima eseguire il join:

SELECT something, somthingelse, old_price
  FROM (SELECT a.something, a.somthingelse, p.quote_price old_price,
               row_number() over (PARTITION BY a.part_no 
                                  ORDER BY valid_from DESC) rnk
           FROM article_table a
           LEFT JOIN price_history p ON a.part_no = p.part_no)
 WHERE rnk = 1;

Potresti anche usare una funzione PL/SQL che restituisca il primo quote_price da price_history quando viene fornito un article_table.part_no .