请教一个UNION ALL的问题,数据不一样了

diffmaker 2017-02-12 02:23:40
在测试UNION ALL功能时,发现一个问题,如下

语句1及结果
select employee_id,department_id from employees where rownum<10 and department_id>=20;
EMPLOYEE_ID DEPARTMENT_ID
----------- -------------
201 20
202 20
114 30
115 30
116 30
117 30
118 30
119 30
203 40

语句2及结果
select employee_id,department_id from employees where rownum<10 and department_id<=30;
EMPLOYEE_ID DEPARTMENT_ID
----------- -------------
200 10
201 20
202 20
114 30
115 30
116 30
117 30
118 30
119 30

可是在我用UNION ALL将它们合并时,问题来了,得到的结果是:
select employee_id,department_id from employees where rownum<10 and department_id>=20
union all
select employee_id,department_id from employees where rownum<10 and department_id<=30;

EMPLOYEE_ID DEPARTMENT_ID
----------- -------------
100 90
101 90
102 90
103 60
104 60
105 60
106 60
107 60
108 100
200 10
201 20
202 20
114 30
115 30
116 30
117 30
118 30
119 30

问题是,最终结果并不是上面单个结果的并集啊?
...全文
793 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
diffmaker 2017-02-12
  • 打赏
  • 举报
回复
多谢版主!!
卖水果的net 2017-02-12
  • 打赏
  • 举报
回复
引用 2 楼 diffmaker 的回复:
只能用临时表吗?
多套一层查询也可以的,或者使用 with as 块。
diffmaker 2017-02-12
  • 打赏
  • 举报
回复
嗯,我也发现了,在使用insert into ... select ...时,也存在这样的问题,结果是随机的 You cannot specify the order_by_clause in the subquery of these operators. 可子查询中不允许使用order by 子句? 只能用临时表吗? 谢谢版主
卖水果的net 2017-02-12
  • 打赏
  • 举报
回复
where rownum<10 这样的结果,是不稳定的,建议考虑一下 row_nubmer 函数,明确排序的列;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧