【问题标题】:insert data and avoid duplication by checking a specific column通过检查特定列插入数据并避免重复
【发布时间】:2017-02-05 11:02:49
【问题描述】:

我有一个本地数据库,我正在尝试插入多行数据,但我不想重复。我没有要从中插入的第二个数据库。我有一个 sql 文件。我要插入的数据库的结构是这样的:

(db)artists
    (table)names->     ID  |  ArtistName  |  ArtistURL  |  Modified

我正在尝试插入:

INSERT names (ArtistName, Modified) 
VALUES (name1, date),
       (name2, date2),
       ...
       (name40, date40)

问题是,我怎样才能插入数据并通过检查我想要使用 SQL 插入的数据列表中的特定列来避免重复?

【问题讨论】:

  • 你用的是哪个RDBMS,mySQl,SQL server?
  • 我正在使用 MariaDB,并从 xampp 启用了 SQLite
  • 您如何从 CSV 中输入值?你有一个脚本可以格式化为 (name1,date) 格式吗?
  • 是的,所有值都是 sql 格式。我使用 'import' 和来自 phpmyadmin 的 sql 文件。我已经让它正确插入了我所有的数据,但是我有一堆重复的,所以我不得不回滚
  • 您可以使用LEFT JOIN ... WHERE b.ArtistName IS NULL 仅插入新记录。如果您无法在两个数据库之间连接,则先将记录暂存到单独的表中,然后从那里插入。

标签: sql duplicates mariadb insertion


【解决方案1】:

复制什么?名字重复?重复行?我假设没有重复ArtistName

  1. 桌子上有UNIQUE(ArtistName)(或PRIMARY KEY)。
  2. 使用INSERT IGNORE 而不是IGNORE

(没有LEFT JOIN等)

【讨论】:

    【解决方案2】:

    我最终遵循了@Hart CO 的建议,将我所有的值插入到一个全新的表中。然后我使用了这个 SQL 语句:

    SELECT ArtistName
    FROM testing_table
    WHERE !EXISTS 
    (SELECT ArtistName FROM names WHERE 
    testing_table.ArtistName = testing_table.ArtistName)
    

    这给了我所有在我的数据中而不是在名称表中的艺术家姓名。 然后我导出到一个 sql 文件并稍微调整 INSERT 以将相应的数据插入到名称表中。

    INSERT IGNORE INTO `names` (ArtistName) VALUES
    *all my values from the exported data*
    

    Where (ArtistName) 可以返回任何数据。例如, (艺术家姓名、艺术家网址、已修改)。只要从导出返回的值有 3 个值。

    这可能不是最有效的,但它对我想要做的事情有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多