oracle的union失效

union的失效介绍

  用于合并两个或多个select结果集,它的基础用法及注意点另行查阅。union它的使用也会失效。oracle有时会报错ora-00933或者ora-00907。
  原因是两个select中都有order by的使用。一是去掉order by,二是以这个select结果为表外边再套一个select就可以了。

业务描述

  今天在公司将以前两个sql结果一块展示出来,然后查询了一下他们的速度很快,但是每一个sql又有几百行。于是用了union,但是发现一直在报ora-00933或者ora-00907。

代码演示

下面代码只提供union的失效处理,不考虑其他的优化
原先内容展示

//查询结果1
select * from A a where a.shop = "衣服" order by a.sellNum;
//查询结果2
select * from A b where b.store = "京东" order by b.sellNum;

错误内容展示

select * from A a where a.shop = "衣服" order by a.sellNum
union
select * from A b where b.store = "京东" order by b.sellNum

正确方式

//方式一处理
select * from (
	select * from A a where a.shop = "衣服" order by a.sellNum
)
union
select * from (
	select * from A b where b.store = "京东" order by b.sellNum
)

//方式二处理
select * from A a where a.shop = "衣服" 
union
select * from A b where b.store = "京东" 

下面本人没有经过测试
可以先记录,待有时间测试

with s1 as (select * from A  a where a.shop = "衣服" 
order by a.sellNum),
s2 as (select * from A b where b.store = "京东" order by b.sellNum)

select * from s1 union select * from s2

  union实际做了两部分动作,结果集合并+排序。oracle认为第一个order by结束后整个select语句就该结束了,但是发现后面没有分号,反而出现了union,所以会报错
共同探讨学习技术创建技术氛围Day9884125

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值