↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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 也不是 标准的,但它不太容易造成 混淆。)

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。