我有一个表项(item_id serial,name varchar(10),item_group int)和一个表items_ver(id serial,item_id int,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,item_group from items where item_id=2;
dbfiddle here