PostgreSQL的CTE表达式中TABLE关键字的作用是什么?
PostgreSQL TABLE关键字用法说明
你提到的TABLE是PostgreSQL支持的标准SQL简写语法,本质是SELECT * FROM的语法糖,并非专门用于调用CTE的特殊关键字。
核心定义
TABLE 表名/CTE名 与 SELECT * FROM 表名/CTE名 的执行逻辑、返回结果完全一致,没有任何性能差异。
示例查询的工作逻辑
你给出的查询中,(TABLE max_i)可以直接等价替换为(SELECT * FROM max_i),改写后的完整语句如下:
WITH max_i AS ( SELECT MAX(i) FROM test ) SELECT * FROM test WHERE i = (SELECT * FROM max_i) - 1 ;
因为max_i这个CTE返回的是单行单列的MAX聚合结果,所以(TABLE max_i)作为标量子查询返回单个数值,可以直接参与减1的算术运算,用于匹配test表中i值为最大值减1的记录。
使用限制
- 仅能用于查询目标的全部字段,不支持加WHERE过滤、GROUP BY聚合、ORDER BY排序等逻辑,有额外查询需求时必须写完整的SELECT语句
- 作为子查询嵌入表达式中时,必须保证返回结果为单行单列,否则会触发运行时错误,要求和普通标量子查询完全一致
内容的提问来源于stack exchange,提问作者user2741831
相关产品推荐
相关产品推荐

