postgres筛选出两表中不同的数据并将其插入目标表中

postgres筛选出两表中不同的数据并将其插入目标表中

背景

同一个材料数据有不同的版本,各版本的数据结构都相同。
上传文件时数据将会插入到表A中,从表A中查出的数据返回到页面进行标记。
但是上传一个版本的文件,数据就会插入到A表中,造成了数据的重复。
因此去重的逻辑为文件上传一次,删除A表中该材料的所有数据后将新数据插入,这就引出了下一个问题:文件每上传一次都需要重新标记。

解决每次上传需要重新标记的方法

  1. 新建一个临时表A_tmp,将上传文件中的数据插入该表。
  2. 使用关键字except关联A表与A_tmp表,筛选出其中不同的数据。
  3. 将该数据插入A表。

实现

insert into A
select * from(
	select * from A_tmp
	except
	select * from A
)a;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot应用中,可以通过以下几个步骤,使用COPY命令将内存中的数据插入PostgreSQL数据库中: 1. 将内存中的数据写入到文件中:首先需要将内存中的数据写入到一个文件中,文件格式可以是CSV、TXT等格式。 2. 执行COPY命令:在Spring Boot应用中,可以使用JdbcTemplate或NamedParameterJdbcTemplate执行SQL语句,包括执行COPY命令。在执行COPY命令时,需要指定名、列名等相关信息,以及数据文件的路径。 3. 删除数据文件:在将数据插入数据库中后,需要将数据文件删除,以释放磁盘空间。 下面是一个代码示例: ```java @Autowired private JdbcTemplate jdbcTemplate; public void insertDataByCopyCommand(List<MyData> dataList) { // 将数据写入到文件中 String filePath = "/path/to/data.csv"; try (FileWriter writer = new FileWriter(filePath)) { for (MyData data : dataList) { writer.write(data.toCsvString()); } } catch (IOException e) { e.printStackTrace(); } // 执行COPY命令 String sql = "COPY my_table (col1, col2, col3) FROM ? WITH (FORMAT csv)"; try { jdbcTemplate.update(sql, filePath); } catch (DataAccessException e) { e.printStackTrace(); } // 删除数据文件 File file = new File(filePath); if (file.exists()) { file.delete(); } } ``` 在这个示例中,MyData是一个数据对象,toCsvString()方法将数据对象转换为CSV格式的字符串。my_table是要插入数据名,col1、col2、col3是要插入的列名。在执行COPY命令时,需要指定数据文件的路径,并设置FORMAT为csv。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值