postgresql - 如何将表格的内容直接插入到另一个表格中?
问题描述
美好的一天,我在 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
我做错了什么?
解决方案
假设您有一个 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/
推荐阅读
- usb - 我想使用 udev 规则阻止除键盘和鼠标之外的所有 USB 设备?
- arrays - SQL 选择查询的循环结果
- javascript - 如果互联网出现故障,想要离线存储表单数据并在互联网活跃时提交
- laravel - Laravel 5.7 中的电子邮件验证语言文件
- python - 用 seaborn 绘制 - 我的实体数量多年来的时间演变
- bootstrap-datetimepicker - 在 boostrap-datetimepicker 的选择器上设置分钟步长
- r - 如何使用r中的brms包处理面板数据
- php - FindBy() 方法“或”/“与”
- android - 在 android 应用程序中运行 USSD 代码时遇到问题
- javascript - 对于angularjs中的循环