我继承了一个包含基本数据的表,基本上如下所示:
person_id first last activity_date
----------------------------------------
98765 Dan Jones 2018-06-15
12345 Mary Smith 2018-07-04
12345 Mary Smith 2018-07-04
21212 Erin Mark 2018-08-11
两大挑战是:
它没有主键,并且
可能有重复的行
供应商将提供一个定期更新数据的csv,我需要将其添加到此现有表中。这又带来了两个挑战:
新文件不是表中现有数据的完全替换,并且
新文件可能与表中现有数据的一部分重叠。
例如:
person_id first last activity_date
----------------------------------------
12345 Mary Smith 2018-07-04
12345 Mary Smith 2018-07-04
21212 Erin Mark 2018-08-11
87878 Tom Davis 2018-08-12
所以问题是,考虑到所有这些挑战,如何更新表?
我的直觉是创建一个重复的表,添加新的数据,然后使用查询来识别重叠和间隙。缺乏一个 EXCEPT
mysql中的命令使这成为一个挑战。事实上,可能会有重复的行。
有人能建议我可能需要的sql来识别csv中缺少的行,我需要将这些行插入到数据库中吗?
1条答案
按热度按时间zqry0prt1#
如您所述,我将创建一个新的重复表,添加一个自动增量id字段作为主键:
在此上创建唯一密钥:
然后使用
IGNORE
要跳过所有重复数据:从供应商处获取csv文件时,请使用
LOAD DATA INFILE
,再次与IGNORE
选项,并且只从数据库中不存在的csv文件导入数据。