↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.

SELECT INTO

SELECT INTO — 从一个 SELECT 的结果创建一个新表

大纲

SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    * | expression [ AS output_name ] [, ...]
    INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY expression [, ...] ]
    [ HAVING condition [, ...] ]
    [ { UNION | INTERSECT | EXCEPT [ ALL ] } select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ]
    [ FOR UPDATE [ OF tablename [, ...] ] ]
    [ LIMIT { count | ALL } [ { OFFSET | , } start ]]

where from_item can be:

[ ONLY ] table_name [ * ]
    [ [ AS ] alias [ ( column_alias_list ) ] ]
|
( select )
    [ AS ] alias [ ( column_alias_list ) ]
|
from_item [ NATURAL ] join_type from_item
    [ ON join_condition | USING ( join_column_list ) ]
  

输入

TEMPORARY
TEMP

如果指定了 TEMPORARY 或 TEMP,输出表只在本次会话中创建,并在会话退出时自动删除。在临时表存在期间,(本会话中)同名的现有永久表不可见。在临时表上创建的任何索引也自动是临时的。

new_table

要创建的新表的名称。该表必须尚不存在。但可以创建与现有永久表同名的临时表。

所有其他输入在 SELECT 中有详细描述。

输出

可能的输出消息的摘要请参阅 CREATE TABLE 和 SELECT 。

描述

SELECT INTO 创建一个新表,并用查询计算出的数据填充它。与普通的 SELECT 不同,数据不返回给客户端。新表的列具有与 SELECT 的输出列相关联的名称和数据类型。

注意

CREATE TABLE AS 在功能上等价于 SELECT INTO。推荐使用 CREATE TABLE AS 语法,因为 SELECT INTO 不是标准的。事实上,这种形式的 SELECT INTO 在 PL/pgSQL 或 ecpg 中不可用,因为它们对 INTO 子句的解释不同。

兼容性

SQL92 用 SELECT ... INTO 表示把值选择到宿主程序的标量变量中,而不是创建新表。这确实是 PL/pgSQL 和 ecpg 中的用法。Postgres 用 SELECT INTO 表示创建表是历史遗留。在新代码中最好用 CREATE TABLE AS 来实现这一目的。(CREATE TABLE AS 也不是标准的,但它不太容易造成混淆。)

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.