我意外地写了一个像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);
这是某些定义SQL标准的结果,还是有一些用例,或者只是有趣的行为,没有人关心以编程方式限制?
答案 0 :(得分:5)
SELECT
之后的输出表达式列表可以为空,从而生成零列结果表。根据SQL标准,这不是有效的语法。 PostgreSQL允许它与允许零列表一致。但是,使用DISTINCT
时,不允许使用空列表。
如果我没有弄错的话,“零列”表的可能性是表继承的副作用。关于Postgres邮件列表的讨论(但我现在找不到)