最近有一個專案在做遷移,是從sqlserver到oracle。如下陳述句遇到麻煩了。
不知道該怎么寫了
select
(select top(1) c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm)
from a, b
where a.nsrdzdah = b.nsrdzdah
group by b.nsrsbh
這個子查詢
(select top(1) c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm)
執行順序是
先c表關聯b表,然后按swdjblx_dm排序,處理好的結果再取第一行。
1.首先oracle里面select后面的子查詢不能order by操作
order by c.swdjblx_dm會報錯
2.ORACLE里面沒有TOP的概念,只有rownum,TOP和ROWNUM不同,TOP是查詢出來結果后再判斷,ROWNUM要想達到和TOP一樣的效果只能在外面套一層,這樣會有一個問題就是套一層以后 where c.nsrsbh = b.nsrsbh這里的B表識別不了了。
select k. skss_swjg_dm from
(select c.skss_swjg_dm
from c
where c.nsrsbh = b.nsrsbh
order by c.swdjblx_dm) k
where rownum = 1
uj5u.com熱心網友回復:
題目相當容易,但是要查詢的結果欄位,一個都沒有說,這個本身就是最大的問題。我這里只用"相關欄位"代替,你需要哪個欄位就填寫哪個欄位。
select a表相關欄位欄位。。。,b表相關欄位欄位
from a,
(select c表相關欄位,b表相關欄位
from(select c.skss_swjg_dm,row_number()over(order by c.swdjblx_dm) rn
from c, b
where c.nsrsbh = b.nsrsbh
)
where rn = 1
)b
where a.nsrdzdah = b.nsrdzdah
uj5u.com熱心網友回復:
注意提問的方法,最大的問題就是需要什么結果只字未提!uj5u.com熱心網友回復:
子查詢中如果只是取某個欄位最小值,那么可以使用oracle的一個聚合函式min(欄位名)轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/81514.html
標籤:開發
