Mysql - 插入多个没有唯一键的唯一行

标签 mysql database insert unique subquery

我对我正在编写的预算申请有疑问。我定期将交易从银行导入 mysql 数据库。我通过网上银行的“下载交易”功能来执行此操作,在该功能中我可以根据我选择的日期范围获得交易列表。为了让我的应用程序正常工作,我的数据库不包含重复的事务至关重要。下载的交易列表是这样的格式

  • 日期、说明、金额、运行余额。

正如您所看到的,问题在于我的借记卡交易没有唯一的引用 ID!这让我抓狂,因为我从同一家银行下载的信用交易确实有一个唯一的引用 ID,但我的借记卡交易却没有。所以我想要的是获取一组事务(通常是 20 个左右)并构建一个 mysql 插入查询,该查询从该组中插入具有日期、desc、amt 和余额的唯一组合的事务。例如,假设从我的银行下载的对账单有以下五笔交易:

  • 2019 年 12 月 20 日给乔的礼物 5.00 10000.00
  • 2019 年 12 月 20 日 油漆 10.00 9990.00
  • 2019 年 12 月 21 日 汉堡店 20.00 9970.00
  • 2019 年 12 月 21 日电费单 100.00 9870.00
  • 2019 年 12 月 21 日电影 10.00 9860.00

并且mysql数据库已经有了

  • 2019 年 12 月 20 日给乔的礼物 5.00 10000.00
  • 2019 年 12 月 20 日 油漆 10.00 9990.00

那我只想插入

  • 2019 年 12 月 21 日 汉堡店 20.00 9970.00
  • 2019 年 12 月 21 日电费单 100.00 9870.00
  • 2019 年 12 月 21 日电影 10.00 9860.00

基本上我只想将唯一的行插入到我的数据库中,并且因为 BoA 不提供唯一的 id,所以我需要额外的逻辑来确定唯一性。你能指导我如何构造这个 mysql 查询吗?如果您甚至可以向我指出相关教程,我将不胜感激!谢谢大家。

最佳答案

如果 table1 是要插入新行的表,而 table2 是包含要插入的新行的表,则可以使用 NOT EXISTS :

insert into table1(Date, Description, Amount, RunningBal)
select t2.Date, t2.Description, t2.Amount, t2.RunningBal
from table2 t2
where not exists (
  select 1 from table1 t1
  where t1.Date = t2.Date and t1.Description = t2.Description
    and t1.Amount = t2.Amount and t1.RunningBal = t2.RunningBal
)

关于Mysql - 插入多个没有唯一键的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912262/

相关文章:

mysql - 长时间闲置后,服务器在 spring-boot-starter-data-jpa 中使用 Mysql 抛出错误 'Could not open JPA EntityManager for transaction'

mysql - SQL:如何使用两个具有依赖关系的条件?

javascript - mySQL按可变数量更新现有值

java - 如何读取文件并将其内容添加到数据库?

python - 如何将 Python 复合键、值字典写入数据库?

mysql - #1136 - 列数与第 1 行的值数不匹配

java - 数据库表架构建议

database - 在 vb6 中实现简单数据库选择/更新程序的更好方法是什么?

php - 如何在mysql中添加所有列的数据

php - SQL 插入 MySQL 不起作用