[英]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;
table2
和table3
是具有名为name
和cnt
列的表,但是结果表( table1
)具有name
和sum
的列。
问题是如何更改命令,以便结果表具有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.