gpt4 book ai didi

sql - order by with union all 子句的有趣行为

转载 作者:行者123 更新时间:2023-12-02 04:42:52 28 4
gpt4 key购买 nike

当查询包含 union all 时,我遇到了一个有趣的 order by 子句行为。

例如我有以下查询:

select * from dual order by 1
union all
select * from dual

失败了,怎么回事?

好吧,看来 oracle 只是不喜欢 order by 后跟 union all。让我们将查询重写为以下内容:

select * from (select * from dual order by 1)
union all
select * from dual

它是固定的!

如果我只是交换两个查询,它也可以工作,所以一个带有 order by 的查询到最后:

select * from dual
union all
select * from dual order by 1

这似乎是不一致的。那么造成这种行为的原因是什么?这是某种错误还是故意造成的?

最佳答案

声明

select * from (select * from dual order by 1)

根本没有定义的顺序。只有最外层的 ORDER BY 在 SQL 中生效(除非设置了行限制)。

如果您仍然碰巧在查询结果中观察到顺序,那么这是一个随时可能消失的巧合。

在声明中

select * from dual
union all
select * from dual order by 1

order by 附加到 union all,而不是第二个 select。因此,它是顶级且定义明确的。

使用最后一种形式。并将 order by 换行以使其更易于阅读。


How can I then sort just single select with union all?

union all 的输出顺序是未定义的,没有order-by 子句。当然,这两个输入不能保证连接起来。

select *, 1 as Tag from dual
union all
select *, 2 as Tag from dual
order by Tag, 1 --simulate ordered concatenation of inputs

关于sql - order by with union all 子句的有趣行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com