如何从PostgreSQL中的select查询中将值插入表中?

我有一个表项(item_id serial,name varchar(10),item_group int)和一个表items_ver(id serial,item_id int,name varchar(10),item_group int).

现在我想从items中插入一行到items_ver.这样做有什么简短的SQL语法吗?

我尝试过:

INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item_id = 2);

但我得到一个语法错误:

ERROR:  syntax error at or near "select"
LINE 1: INSERT INTO items_ver VALUES (SELECT * FROM items WHERE item...

我现在试过:

INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2;

它工作得更好,但我收到一个错误:

ERROR:  column "item_group" is of type integer but expression is of type 
character varying
LINE 1: INSERT INTO items_ver SELECT * FROM items WHERE item_id = 2;

这可能是因为列在表中以不同的顺序定义.列顺序是否重要?我希望PostgreSQL匹配列名.

最佳答案
列顺序很重要,因此如果(并且仅当)列顺序匹配,您可以例如:

insert into items_ver
select * from items where item_id=2;

或者,如果它们不匹配,您可以例如:

insert into items_ver(item_id, item_group, name)
select * from items where item_id=2;

但依赖列顺序是一个等待发生的错误(它可以改变,列数也可以) – 它也使你的SQL更难读

没有好的“快捷方式” – 您应该明确列出要插入的表和用于源数据的查询的列,例如:

insert into items_ver (item_id, name, item_group)
select item_id, name, item_group from items where item_id=2;

dbfiddle here

转载注明原文:如何从PostgreSQL中的select查询中将值插入表中? - 代码日志