SQLSERVER 迁移ORACLE语句语法问题
最近有一个项目在做迁移,是从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