如何按日期和 ID 删除 MySQL 表上的重复项? [复制]
Posted
技术标签:
【中文标题】如何按日期和 ID 删除 MySQL 表上的重复项? [复制]【英文标题】:How to delete duplicates on a MySQL table by date and id? [duplicate] 【发布时间】:2016-04-05 12:04:11 【问题描述】:我有一个表格,其中包含来自应用的结果。
有些结果是重复的,我可以看到哪个“survey_question_id
”有重复的答案。
通过这个查询,我可以看到每个“survey_question_id
”有多少个重复项:
SELECT `id`,`survey_question_id`,
`question`,`date`, COUNT(*)
FROM answers
GROUP BY `survey_question_id`, `date`
HAVING COUNT(*) > 1 and `date` > '2015-10-15'
表格结果:
如何删除重复项?
【问题讨论】:
您想删除所有这些答案,还是只想为每个问题保留一个重复的答案? @TareqMahmood 我只想为每个问题保留一个重复的答案。 @JayBlanchard 它不一样,因为要重复它必须具有相同的survey_question_id、问题和日期。 不,不是真的。从 mysql 中删除重复项是一个通用概念,通常与列名和/或数据无关。 如果您的字段只有日期(不包括时间),您可能可以使用该解决方案 【参考方案1】:对于重复记录删除,您可以使用:
如果您想保留 LOWEST id,则可以使用:
DELETE n1 FROM answers n1, answers n2 WHERE n1.id > n2.id
AND n1.id <> n2.id
AND n1.survey_question_id = n2.survey_question_id
AND n1.question = n2.question
AND n1.date = n2.date
如果您想保留 HIGEST id,则可以使用:
DELETE n1 FROM answers n1, answers n2 WHERE n1.id < n2.id
AND n1.id <> n2.id
AND n1.survey_question_id = n2.survey_question_id
AND n1.question = n2.question
AND n1.date = n2.date
如果您认为将来会再次发生这种情况,请添加 UNIQUE INDEX。
ALTER IGNORE TABLE answers
ADD UNIQUE INDEX (id,survey_question_id,
question,date);
附注:在执行任何类型的批量删除之前,请确保您拥有此表的副本。
【讨论】:
我试过了,但给出了结果:MySQL返回了一个空的结果集(即零行)。 @pmcmf 你在这个表4中有多少列? @pmcmf:我已经更新了我的答案 你的和这个类似:DELETE a1 FROM answers a1, answers a2 WHERE a1.id> a2.id AND a1.survey_question_id = a2.survey_question_id AND a1.question = a2.question AND a1。日期 = a2.date AND a1.date > '2015-10-15' 无@pmcmf > 【参考方案2】:试试这个:
DELETE FROM answers
WHERE date > '2015-10-15'
AND id NOT IN
(SELECT id
FROM (SELECT MIN(id) AS id FROM answers
WHERE date > '2015-10-15'
GROUP BY survey_question_id) x
)
【讨论】:
这是非常危险的查询 这将删除一堆好的数据,同时在系统中留下重复的数据。根据屏幕截图中的数据,ID 141450 的 2 个副本将保持不变,而所有其他数据(在屏幕截图中)将被销毁。 对不起,这个不起作用。还是谢谢【参考方案3】:你可以
-
create table your_table2 as select distinct * from original_table 然后只是
删除带有一些级联约束的 original_table 并
更改 your_table2,重命名并重新添加所有约束
或删除 original_table 中的所有数据,然后插入 original_table select * from your_table2
我认为this和你的问题类似。
【讨论】:
在 tmp 表 ist 中保存数据的好方法以上是关于如何按日期和 ID 删除 MySQL 表上的重复项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
删除左表上的重复项,同时在右表SELECT JOIN上保留重复项