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

前端之家收集整理的这篇文章主要介绍了如何从PostgreSQL中的select查询中将值插入表中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表项(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

猜你在找的Postgre SQL相关文章