Postgresql

如何從 PostgreSQL 中的選擇查詢中將值插入表中?

  • March 2, 2022

我有一張桌子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在這裡

引用自:https://dba.stackexchange.com/questions/2973