为什么没有列的SELECT有效

Tom*_*eif 4 postgresql

我意外地写了一个类似的查询select from my_table;,令人惊讶的是它是有效的声明.对我来说更有趣的是,即使SELECT;是PostgreSQL中的有效查询.您可以尝试使用以下方法编写很多有趣的查询:

select union all select;
with t as (select) select;
select from (select) a, (select) b;
select where exists (select);
create table a (b int); with t as (select) insert into a (select from t);
Run Code Online (Sandbox Code Playgroud)

这是一些定义SQL标准的结果,还是有一些用例,或者只是有趣的行为,没有人关心以编程方式限制?

a_h*_*ame 5

从手册开始:

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

如果我没有弄错的话,"零列"表的可能性是表继承的副作用.关于Postgres邮件列表的讨论(但我现在找不到)