最近有一个项目在做迁移,是从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
(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
我这里只用"相关字段"代替,你需要哪个字段就填写哪个字段。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