簡體   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