pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SELECT INTO — 从一个查询的结果创建一个新表
SELECT [ ALL | DISTINCT [ ON (expression[, ...] ) ] ] * |expression[ ASoutput_name] [, ...] INTO [ TEMPORARY | TEMP ] [ TABLE ]new_table[ FROMfrom_item[, ...] ] [ WHEREcondition] [ GROUP BYexpression[, ...] ] [ HAVINGcondition[, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ]select] [ ORDER BYexpression[ ASC | DESC | USINGoperator] [, ...] ] [ LIMIT {count| ALL } ] [ OFFSETstart] [ FOR UPDATE [ OFtablename[, ...] ] ]
可能的输出消息的摘要请参阅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中的用法。PostgreSQL 用 SELECT INTO 表示创建表是历史遗留。在新代码中最好用 CREATE TABLE AS 来实现这一目的。(CREATE TABLE AS 也不是标准的,但它不太容易造成混淆。)
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。