postgresql ORDER BY标量子查询

0kjbasz6  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)
SELECT * FROM Teest ORDER BY 1;  -- OK if you're using PostgreSQL
SELECT * FROM Teest ORDER BY 'error, of course';
ERROR:  non-integer constant in ORDER BY

字符串
所以我想知道是否可以在ORDER BY中使用 * 标量子查询 *:

SELECT * FROM Teest ORDER BY (SELECT 1);


然而,结果是**ORDER BY (SELECT 1)不起作用**(即,结果没有排序)。它也没有抛出错误。
为什么?为什么?不是整数吗?但是如果我写ORDER BY (SELECT 1),PostgreSQL不会抛出错误;这表明PostgreSQL知道ORDER BY后面是一个整数。(否则,它将给予如上所示的错误消息。)
创建表格Teest

CREATE TABLE Teest (_ INTEGER);
INSERT INTO Teest VALUES (1), (3), (5), (2), (4), (6);


PostgreSQL v16

mhd8tkvw

mhd8tkvw1#

ORDER BY子句中的整数具有特殊含义:
每个***expression***可以是输出列(SELECT列表项)的名称或序号,也可以是由输入列值形成的任意表达式。
这就是为什么它被区别于字符串常量。错误警告你按常量排序没有任何意义。如果你说ORDER BY 1,这并不意味着“按常量排序”(无操作),而是“按第一列排序”。
SQL-92标准只允许ORDER BY子句中的列别名和整数。PostgreSQL通过允许几乎任意的表达式来扩展它。子查询(SELECT 1)没有扁平化,所以PostgreSQL不知道它实际上是一个整数常量。

相关问题