繁体   English   中英

将两个表合并为一个具有相同列名的表

[英]Merging two tables into one with the same column names

我使用此命令将2个表合并为一个:

CREATE TABLE table1 AS 
SELECT name, sum(cnt)
FROM (SELECT * FROM table2 UNION ALL SELECT * FROM table3) X
GROUP BY name
ORDER BY 1;

table2table3是具有名为namecnt列的表,但是结果表( table1 )具有namesum的列。

问题是如何更改命令,以便结果表具有name列和cnt列?

您是否尝试过(请注意AS cnt )?

CREATE TABLE table1 AS SELECT name,sum(cnt) AS cnt
  FROM ...

在没有显式名称的情况下,函数的输出会继承Postgres中的基本函数名称。 您可以在SELECT列表中使用列别名来解决此问题,例如已经提供的@hennes

如果需要继承具有名称和类型(可能还有更多)的所有原始列,则还可以使用单独的命令创建表:

  • 要仅复制具有名称和数据类型的列,请仍然使用CREATE TABLE AS ,但添加LIMIT 0

     CREATE TABLE table1 AS TABLE table2 LIMIT 0; -- "TABLE" is just shorthand for "SELECT * FROM" 
  • 复制( 根据文档 ):

    所有列名称,它们的数据类型及其非空约束:

     CREATE TABLE table1 (LIKE table2); 

    ...以及可选的默认值,约束,索引,注释和存储设置:

     CREATE TABLE table1 (LIKE table2 INCLUDING ALL); 

    ...或者例如,仅是默认值和约束:

     CREATE TABLE table1 (LIKE table2 INCLUDING DEFAULTS INCLUDING CONSTRAINTS); 

然后INSERT

INSERT INTO table1 (name, cnt)
SELECT ...        -- column names are ignored

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM