【问题标题】:Merging two tables into one with the same column names将两个表合并为一个具有相同列名的表
【发布时间】:2014-08-31 12:08:14
【问题描述】:

我使用这个命令将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

问题是如何更改命令以使结果表具有namecnt 列?

【问题讨论】:

    标签: sql postgresql create-table


    【解决方案1】:

    你试过这个吗(注意AS cnt)?

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

    【讨论】:

      【解决方案2】:

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

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

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

        CREATE TABLE table1 AS
        TABLE table2 LIMIT 0;  -- "TABLE" is just shorthand for "SELECT * FROM" 
        
      • 复制 (per documentation):

        所有列名、它们的数据类型和它们的非空约束:

        CREATE TABLE table1 (LIKE table2);
        

        ... 和 可选 还有默认值、约束、索引、cmets 和存储设置:

        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
      

      【讨论】:

        猜你喜欢
        • 2019-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 2020-07-11
        • 2018-11-27
        • 2011-07-06
        • 1970-01-01
        • 2014-09-28
        相关资源
        最近更新 更多