在 PostgreSQL 里的作用就是快速构造一个“只有一行/几行”的临时表,语法规则:
-
一条记录用括号包起来,多条记录用逗号隔开;
-
外层给这张临时表起别名(
AS alias(col1, col2…)
可选); -
可以在任何需要表的地方(FROM、WITH、INSERT…)直接使用。
最常用的 3 种用法
-
单行常量表(演示函数 / 表达式)
SELECT *
FROM (VALUES (1,'a'), (2,'b')) AS t(id, name);
-
多行批量插入
INSERT INTO my_table(id, name)
VALUES (1,'Alice'), (2,'Bob'), (3,'Cindy');
-
作为子查询
SELECT *
FROM (VALUES ('2025-07-28 15:37:18'::timestamp)) AS t(ts);
回到刚才的例子
FROM (VALUES ('2025-07-28 15:37:18'::timestamp)) AS t(ts)
-
括号里只有一条记录,字段名/类型由字面量推断;
-
外层起别名
t
,列名ts
,后续 SELECT 里就能直接引用t.ts
。
select * from(
values('aa',12 ),('vic',11)
) as t(name,age)