首页 > 解决方案 > 如何将表格的内容直接插入到另一个表格中?

问题描述

美好的一天,我在 Mirth Connect 中使用 Javascript 将分配在 PostgreSql 数据库表中的所有原始数据直接插入到另一个表中,并在重复的情况下更新该行。我正在尝试它,但它给了我这个错误:

InsertIntoPatientMapping= dbConn.executeUpdate('insert into patient_mapping (select * from patient_mapping_test) ON DUPLICATE KEY UPDATE');
    Wrapped org.postgresql.util.PSQLException: ERROR: syntax error at or near "DUPLICATE"  Position: 69

我做错了什么?

标签: postgresqlselectsql-insert

解决方案


假设您有一个 id 列,对于仅将键视为重复的更新插入,您可以:

insert into patient_mapping (select * from patient_mapping_test) ON CONFLICT (id) DO UPDATE SET id=EXCLUDED.id

https://www.postgresql.org/docs/13/sql-insert.html

编辑

为此,您需要考虑几件事:

  • 您需要指定发生冲突的列;
  • 每列必须有一个索引;
  • 您需要指定如何替换冲突的值。

例如:

create table T1 (id integer unique);
create table T2 (id integer unique);
insert into T1 (id) values (1);
insert into T1 (id) values (2);
insert into T2 (id) values (1);
insert into T2 (select * from T1) on conflict (id) do update set id=EXCLUDED.id;

select * from T2;

这可能会对您有所帮助:https ://www.postgresqltutorial.com/postgresql-upsert/


推荐阅读