我找到了一张人的桌子,从一开始就包含重复的人。遗憾的是,有时数据会挂钩到重复项中的一个或另一个,因此我宁愿保留它们,因为这些记录不是问题的一部分,删除这些记录会导致更多问题。
有人在2天前更新了用户创建代码,最终产生了大量的重复数据(数千个)。我需要删除过去2天内的所有重复项。我无法使用“唯一密钥方法”,因为较旧的重复项附加了数据(预订等)。
有谁知道如何解决这样的问题?我明确地想要删除最近2天的重复项,在表中留下每个人的1份副本。
yourClient.fetchAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.toObservable()
.flatMapIterable(movies -> movies)
.flatMap(movie -> yourClient.fetchByMovieId(movie.getId()))
.toList()
.subscribe()...
可以使用以下列来检查记录是否重复: 名字,姓氏,出生日期,出生地,birth_country
答案 0 :(得分:0)
在这种情况下,您可以创建另一个具有相同模式的表,并在此表中创建一个组合的唯一列:firstname, lastname, birthdate, birthplace, birth_country
。
现在,您可以使用存储过程或自定义程序将第一个表中的数据写入新表。之后,从旧表中删除2天数据,并将新表中的数据存储到旧表中。
答案 1 :(得分:0)
DELETE MAIN_TABLE
FROM people_copy as CHILD, people_copy as MAIN_TABLE
WHERE
(CHILD.company_id = MAIN_TABLE.company_id OR CHILD.company_id IS NULL AND MAIN_TABLE.company_id IS NULL)
AND (CHILD.firstname = MAIN_TABLE.firstname OR CHILD.firstname IS NULL AND MAIN_TABLE.firstname IS NULL)
AND (CHILD.lastname = MAIN_TABLE.lastname OR CHILD.lastname IS NULL AND MAIN_TABLE.lastname IS NULL)
AND CHILD.ID < MAIN_TABLE.ID AND CHILD.created_at > DATE_ADD(SYSDATE(),INTERVAL -2 DAY);
在这里,您可以自行加入该表并比较要比较的列数。
这会对你有所帮助。
You can check SQL Fiddle demo