我对我正在编写的预算申请有疑问。我定期将交易从银行导入 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/