回答

收藏

在Oracle中进行子选择

技术问答 技术问答 251 人阅读 | 0 人回复 | 2023-09-12

我正在尝试从子选择的另一个表中选择最新的价格。但我不知道如何让它工作。) Y8 K& P* `+ L9 k1 _% A
这是我试过的:
; @' A& j# t" u5 T; _6 O6 w6 ?2 hselect something,somthingelse,  (    select * from     (      select QUOTE_PRICE as old_price      from price_history      where price_history.part_no= article_table.part_no      order by valid_from desc    ) where rownum=1  )from  article_table where rownum 子选本身可以工作,但找不到article_table.part_no:
' P5 Z/ E7 d! s* ]SQL错误:ORA-00904:“ article_table”。“ part_no:无效标识符4 q. `' r# C& N! P$ k' L4 M
更新:# P: V; J* A, l
当前解决方案:
( D' j9 S6 J1 D$ z1 g$ H% X7 Lselect something,somethingelse,(  SELECT MIN(QUOTE_PRICE) KEEP (DENSE_RANK FIRST ORDER BY valid_from)  FROM price_history  WHERE part_no=article_table.part_no) as old_pricefrom  article_table a where rownum 在Oracle在中间,子查询只能看到一级父级查询中的值。因为你有两个嵌套选择,一个内部看不到一个外部。
& x5 |% y/ z, U您可以先执行连接:
4 y3 }, J7 s' s: b! L7 uSELECT 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;你也可以用一个PL /
0 u3 @0 A; U! ?9 SSQL在函数返回之前quote_price从price_history时提供的article_table.part_no。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则