SELECT INTO
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] [, ...] ] [ FOR UPDATE [ OFtablename[, ...] ] ] [ LIMIT [start, ] {count| ALL } ] [ OFFSETstart] wherefrom_itemcan be: [ ONLY ]table_name[ * ] [ [ AS ]alias[ (column_alias_list) ] ] | (select) [ AS ]alias[ (column_alias_list) ] |from_item[ NATURAL ]join_typefrom_item[ ONjoin_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
中的用法。PostgreSQL 用
SELECT
INTO 表示创建表是历史遗留。在新代码中最好用
CREATE TABLE AS 来实现这一目的。(CREATE TABLE AS 也不是标准的,但它不太容易造成混淆。)