oracle in 子查询不能order by 的解决方案
今天,发现一个超级有意思的问题。查询数据库的时候试可以确定我写的语句没有问题,还找同事也看了几次。查了资料发现是ORDER BY 不能子查询。
具体是这样的:接到上级的需求,需要查最近两百数据对应的名字,
刚开始拿到需求这笔很简单,直接排序取200条,然后在IN 不就完事了。
SELECT ID,NAME FROM TBL_A WHERE ID IN (SELECT ID FROM (SELECT ID FROM TBL_B ORDER BY CREATE_DATE DESC) WHERE ROWNUM<=200 ORDER BY ROWNUM ASC)
可是事情就发生,有上面这个语句作死也查不出来。。。以为语句写错了。查了这种资料发现,ORDER BY 不用子查询,后来就改了一下
SELECT ID,NAME FROM TBL_A WHERE ID IN (SELECT ID FROM (SELECT ID FROM (SELECT ID FROM TBL_B ORDER BY CREATE_DATE DESC) WHERE ROWNUM<=200 ORDER BY ROWNUM ASC))
这写法有点臭,不过总算是实现了,大家千万不要放到代码里去,我这个只是在oracle 编辑器取的数据。不知道大家还有什么更好的意见没有。