Postgresql
如何從 PostgreSQL 中的選擇查詢中將值插入表中?
我有一張桌子
items (item_id serial, name varchar(10), item_group int)
和一張桌子items_ver (id serial, item_id int, name varchar(10), item_group int)
。
items_ver
現在我想在from中插入一行items
。是否有任何簡短的 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在這裡