首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle UNION和ORDER BY的奇怪问题

Oracle UNION和ORDER BY的奇怪问题
EN

Stack Overflow用户
提问于 2014-08-19 23:58:38
回答 1查看 7.2K关注 0票数 27

下面的查询在几乎每个数据库(或多或少一个dual虚拟表)中都是perfectly valid的,包括Oracle:

代码语言:javascript
复制
select 'A' as x from dual union all
select 'B'      from dual
order by x asc

正在返回:

代码语言:javascript
复制
| X |
|---|
| A |
| B |

现在,这个查询仍然是非常标准的SQL,但是在Oracle上使用doesn't work

代码语言:javascript
复制
select 'A' as x from dual union all
select 'B'      from dual union all
select 'C'      from dual
order by x asc

我得到了

代码语言:javascript
复制
ORA-00904: "X": invalid identifier

然而,这是works

代码语言:javascript
复制
select 'A' as x from dual union all
select 'B' as x from dual union all
select 'C'      from dual
order by x asc

我一直在处理这个问题,并弄清楚,显然,至少第一次选择和倒数第二次选择(??)subselect需要有一个名为x的列。在第一个示例中,两个子选择似乎简单地重合。Working example

代码语言:javascript
复制
select 'A' as x from dual union all
select 'B'      from dual union all
select 'C'      from dual union all
select 'D'      from dual union all
select 'E'      from dual union all
select 'F' as x from dual union all
select 'G'      from dual
order by x asc

正如您可能已经猜到的,这个wouldn't work

代码语言:javascript
复制
select 'A' as x from dual union all
select 'B'      from dual union all
select 'C'      from dual union all
select 'D'      from dual union all
select 'E' as x from dual union all
select 'F'      from dual union all
select 'G'      from dual
order by x asc

有趣的附注:

派生表似乎不受此限制。This works

代码语言:javascript
复制
select * from (
  select 'A' as x from dual union all
  select 'B'      from dual union all
  select 'C'      from dual
)
order by x asc

问题:

这是一个(已知的?)Oracle SQL解析器中是否存在错误,或者在语言语法中是否有任何非常细微的细节绝对要求第一个和倒数第二个subselect保存与ORDER BY子句中引用的名称相同的列?

EN

回答 1

Stack Overflow用户

发布于 2014-08-20 03:52:34

这并不能解释为什么您会从当前查询中得到不一致的行为,但是在Oracle中,您可以很容易地重写如下代码(这应该不会因为无效标识符错误而失败):

代码语言:javascript
复制
with t(x) as (
  select 'A' from dual
  union all
  select 'B' from dual
  union all
  select 'C' from dual
)
select * from t
order by x asc

额外的好处是,您只需指定一次列别名(x)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25387951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档