我创建了table1
列a,b,c,d
,其中包含数据。
table2
与table1
基本相同,它有不同的列顺序+附加列,即a,e,d,b,c
,没有数据。
如何将数据从table1
复制到table2
请注意,a
列是id
,我希望该数字保持不变。
这是我已经尝试过的:
insert into table2 select (a,d,b,c) from table1
这导致column "a" is of type bigint but expression is of type record
insert into table2 (a,d,b,c) values(select a,d,b,c from table1)
无效syntax error at or near "select"
insert into table2 (a,e,d,b,c) values(select a,NULL,d,b,c from table1)
收到错误:INSERT has more target columns than expressions
答案 0 :(得分:14)
指定要插入的列名,但在定义选择时不要使用values
。
insert into table2(a,d,b,c) select a, d, b, c from table1
答案 1 :(得分:0)
您可以使用以下方法在PostgreSQL中的表之间复制数据:
INSERT INTO [Tablename]([columns]) SELECT [Columns] FROM [Table to copy form];
您的情况如下:
INSERT INTO table2(a,b,c,d) SELECT a,b,c,d FROM table1;
您还可以使用以下命令轻松创建具有相同表结构的空表,从而轻松复制到表:
CREATE TABLE [New Table] AS [Old Table] WITH NO DATA;
然后从以前运行INSERT
命令。
如果仅需要相同的副本,则可以运行:
CREATE TABLE [New Table] as [Old Table];
您可以在我为dataschool写的这篇文章中了解有关在表之间复制数据的更多信息: https://dataschool.com/learn/copying-data-between-tables
您可以在文档中阅读有关插入命令的更多信息: https://www.postgresql.org/docs/9.2/sql-insert.html
答案 2 :(得分:0)
第一个解决方案的问题实际上是括号。如果您这样做:
insert into table2 select a,d,b,c from table1
如果table2
具有按正确顺序排列的相同数量的列,那么它将起作用。
之所以会这样,是因为在Postgres中,如果您这样做
select (1, 2), 3
这意味着您要选择一个类型为record的字段,并在其中选择值1和2,以及一个类型为int的值为3的字段。