删除重复的行(搜索并尝试已在此处的内容)

时间:2016-07-22 13:32:14

标签: mysql mariadb

我已经有一两天试图删除我的系统中出现的一些重复的数据库行,但是我已经尝试了大多数(如果不是全部)方法I&#到目前为止,已经能够在Stackoverflow上找到了。我之前在同一个mariadb和mysql上完成了其中几种方法的完美运行,因为我现在试图删除它们。

这是我的表结构。

ID |日期|经验|或CharacterId

ID是唯一标识符(也称为自动递增),每个字符ID每个日期应该只有一个条目,以及那些被复制的内容。一些特征每个日期有5-7个条目,相同的日期(我已经检查过)。

我已尝试过以下查询,删除过去曾因我遇到的类似问题而有效的问题。

DELETE n1 FROM experiencehistory n1, experiencehistory n2 WHERE n1.id > n2.id AND n1.date = n2.date AND n1.characterid = n2.characterid

以及

DELETE experiencehistory FROM experiencehistory

LEFT OUTER JOIN(    SELECT MIN(id)为RowId,characterid,date    来自经验史    GROUP BY characterid,date )作为KeepRows ON    experiencehistory.id = KeepRows.RowId 哪里    KeepRows.RowId为空

两者都没有在控制台中产生任何结果,并且通过PHPMyadmin我得到了这个错误;

Static analysis:

1 errors were found during analysis.

Unexpected token. (near "experiencehistory" at position 7)

关于我可以做些什么来解决这个问题的建议,或者我是否主要尝试过这些方法的错误?

Serverversion:10.1.13-MariaDB - mariadb.org二进制分发

感谢任何见解!

1 个答案:

答案 0 :(得分:1)

您可以尝试这种方式(删除所有id!= for min(id)group by characterid,date

DELETE FROM experiencehistory
where (id, characterid, date) not in 
      ( select x_id, characterid , x_date from  ( select  min(x.id) as x_id
                  , x.characterid as x_characterid 
                 , x.date  as x_date
          from  experiencehistory  as x group by x.characterid, x.date ) t );