【问题标题】:Mysql - Insert multiple unique rows without a unique keyMysql - 在没有唯一键的情况下插入多个唯一行
【发布时间】:2020-05-11 17:09:04
【问题描述】:

我有一个关于我正在编写的预算应用程序的问题。我定期将交易从我的银行导入 mysql 数据库。我通过我的网上银行的“下载交易”功能执行此操作,在该功能中,我根据我选择的日期范围获得交易列表。为了使我的应用程序正常工作,我的数据库不包含重复事务至关重要。下载的交易清单采用这种格式

  • 日期、描述、金额、跑步余额。

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

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

而且mysql数据库已经有了

  • 12/20/2019 送给乔的礼物 5.00 10000.00
  • 12/20/2019 油漆 10.00 9990.00

那我只想插入

  • 12/21/2019 汉堡店 20.00 9970.00
  • 12/21/2019 电费 100.00 9870.00
  • 12/21/2019 电影 10.00 9860.00

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

【问题讨论】:

    标签: mysql database insert unique nested-query


    【解决方案1】:

    如果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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      相关资源
      最近更新 更多