繁体   English   中英

`ORDER BY` 表达式中的列别名?

[英]Column alias in `ORDER BY` expression?

在 Oracle 12.1.0.2 和 Oracle 19c 中,此查询:

with test_data (c1, c2) AS (
SELECT 'A', 1 FROM DUAL UNION ALL
SELECT 'B', 2 FROM DUAL UNION ALL
SELECT 'C', 3 FROM DUAL )
SELECT c1, c2*-1 c2
FROM test_data
order by c2*-1;

返回:

 +----+----+ | C1 | C2 | +----+----+ | A | -1 | | B | -2 | | C | -3 | +----+----+

换句话说,在c2ORDER BY c2*-1指的是c2 SELECT列表中列的别名,而不是c2数据库中的表列。

我在阅读Oracle SQL Reference Guide 时,认为上面的查询结果不正确,Oracle 认为ORDER BY表达式中的标识符引用列别名是不合适的。

甲骨文是不是一直都这样,而我从来没有注意到? Oracle 的文档中是否有某些内容表明上述结果是正确且符合预期的?

文档对我来说似乎很清楚:

表达式

expr 根据 expr 的值对行进行排序。 该表达式基于选择列表中的列或 FROM 子句中的表、视图或物化视图中的列。

它实际上首先引用了选择列表中的“列”(这意味着别名)。

如果需要表列,请使用别名:

order by test_data.c2 * -1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM