我继承了一个具有基本数据的表,该表基本上是这样的:
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
问题就变成了,面对所有这些挑战,我该如何更新表格?
我的本能是创建一个重复表,添加新数据,然后使用查询来识别重叠和空白。 MySQL中缺少EXCEPT
命令,这使它成为一个挑战。可能存在重复的行的事实也是如此。
任何人都可以建议我可能需要从我要插入数据库的CSV中识别缺少的行的SQL吗?
答案 0 :(得分:1)
我将按照您的描述创建一个新的重复表,并添加一个auto_increment id字段作为主键:
CREATE TABLE table2
(id int auto_increment primary key,
`person_id` int,
`first` varchar(20),
`last` varchar(20),
`activity_date` date)
为此创建一个唯一的密钥:
alter table table2 add unique key (`person_id`, `first`, `last`, `activity_date`);
然后使用IGNORE
插入所有数据,以跳过所有重复的数据:
insert ignore into table2 (`person_id`, `first`, `last`, `activity_date`)
select * from table1
从供应商处获取CSV文件时,再次使用LOAD DATA INFILE
和IGNORE
选项,这将仅从数据库中不存在的CSV文件中导入数据。