【问题标题】:Copying all rows from one table to another without writing out all of the columns将所有行从一个表复制到另一个而不写出所有列
【发布时间】:2021-07-25 14:20:33
【问题描述】:

我正在尝试将一个表中的所有行复制到另一列中不同的行(使用 Postgresql 数据库)。我知道可以这样做:

INSERT INTO table2(col1, col2, col3, ...)
SELECT 
    DISTINCT ON (col1) col1, col2, col3, ...
FROM table1; 
  

我遇到的问题是table1 有 100 多列,所以我不想写出所有列名。我试图做类似的事情:

INSERT INTO table2 (*)
SELECT 
    DISTINCT ON (col1) *
FROM table1;

导致语法错误。有人可以提供一个语法正确的代码 sn-p 吗?

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    如果列完全对齐,您可以使用:

    INSERT INTO table2
        SELECT DISTINCT ON (col1) t1.*
        FROM table1 t1
        ORDER BY col1;
    

    非常重要的是:使用DISTINCT ON 时,您应该始终拥有ORDER BY,其中ORDER BY 的键与括号中的表达式匹配。

    省略INSERT 中的显式列是危险的——正是因为可能存在一些错误(列乱序或列数不同)。有时,当您编写脚本并且您知道目标表确实与源表匹配时,它会很方便。

    【讨论】:

    • 谢谢!我将 table2 创建为CREATE TABLE table2 (LIKE table1);,所以我想我应该可以省略显式列,对吗?
    • @Thetafinity 。 . .是的,尽管我也可能会建议 create table as
    猜你喜欢
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2018-06-19
    • 1970-01-01
    • 2021-10-13
    • 2016-05-05
    相关资源
    最近更新 更多