有这样一张大象状态表,即一头大象所在位置可以有几种状态。
status:
id int auto_increment pk
slon_id int
status varchar
date datetime
由于软件错误(更准确地说是缺陷),出现了表格的重复记录
1 1 Розовый слон в Африке 18.11.2016...
2 1 Розовый слон в Африке 18.11.2016...
3 1 розовый слон уже в Зимбабве 19.11.2016...
4 2 Зеленый слон в Европе 15.11.2016...
对SQL解决方案感兴趣。有没有办法删除重复的条目?是否可以一次删除重复的条目,以免丢失历史记录?(也就是说,如果有多个关于非洲和粉象的条目,请删除除一个以外的所有条目)。
动作算法:
delete where id in (subquery)。结果是这样的,如果你考虑
uniqfield一个应该变得唯一的字段,留下一个最小值的行id:对于两个字段的组合,以便您可以看到发生了什么变化
deleteinmysql不会让您直接从子查询读取的表中删除,但如果需要,另一个子查询会绕过它。如果保留哪些行和删除哪些行并不重要并且DBMS版本允许,那么在mysql 5.7.4之前你可以简单地挂一个唯一索引指示
ignore这将删除这些字段的所有重复项,除了一行。在当前版本中,该
ignore行为已被删除并导致错误。我不明白他们为什么删除它,很可能是因为不明显的行为,将删除哪一行以及返回到 SQL 标准的一般过程。这个选项应该有效。
TESTTEST应替换为您自己的表名。此查询将为每个条目留下一个slon_id最大日期。这就是它如何删除该字段中的所有重复项
val并留下一个旧的id