首页 > 解决方案 > “选择 ;” 为什么postgresql中存在这个语句

问题描述

查询:

select ;

在 postgresql 中有效。它返回一个没有属性的元组。

# select ;
--
(1 row)

它具有清晰的语义,结果可以用作子查询:

# select 1 from (select )  as rip;
 ?column? 
----------
        1
(1 row)

事实上,可以使用它创建一个没有属性的表。甚至可以添加元组!

但我的问题是,它为什么存在?

我在没有 from 子句的 select 中看到了值,因为 psql 可以用作计算器:

 # select 3 * 6;
 ?column? 
 ----------
         18
 (1 row)

和或用于调用 UDF。

但我无法想象用于select ;

它很有用还是postgresql解析器的奇怪之处?

标签: postgresql

解决方案


看这里:

https://www.postgresql.org/docs/current/sql-select.html

空 SELECT 列表

SELECT 之后的输出表达式列表可以为空,生成一个零列的结果表。根据 SQL 标准,这不是有效的语法。PostgreSQL 允许它与允许零列表保持一致。但是,当使用 DISTINCT 时,不允许使用空列表。


推荐阅读