2016-07-22 54 views
0

我已经有一两天试图删除一些重复的数据库行,在我的系统出现轻微失败后出现在我的系统中,我试过了大多数(如果不是全部的话)我在Stackoverflow上找到的方法。我已经有好几种这些方法可以在我以前试图删除的mariadb和mysql上完美地工作了。删除重复的行(已搜索并尝试这里已经有)

这是我的表格结构。

ID |日期|经验| characterid

ID是唯一标识符(aka Auto Incremeting),每个字符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,日期 FROM experiencehistory GROUP BY或CharacterId,日期 )作为KeepRows ON experiencehistory.id = KeepRows.RowId WHERE KeepRows.RowId IS NULL

两者都产生否导致控制台,并通过PHPMyadmin我得到这个错误;

Static analysis: 

1 errors were found during analysis. 

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

什么我可以做任何建议,以解决这个还是我做错了什么这些方法我试过为主?

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

感谢任何见解!

回答

1

你可以试试这个方法(删除所有ID!=用于分钟(ID),通过或CharacterId组,日期

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); 
+0

我也很喜欢这个想法,但沿线地方我在我得到一个错误口角。尝试删除/添加父级,但无法完全弄清楚这个错误,也许你碰到过类似的东西? >>> #1064 - 你的SQL语法有错误;检查与你的MariaDB对应的手册服务器版本的正确语法使用附近的'来自experiencehistory组的字符,日期))'在第2行 >>在第一篇文章中还添加了服务器版本。 – Hultin

+0

它在第一次运行更新后的文章时似乎工作得很好,除了它超时(我没有考虑到所涉及的表包含超过一百万行)。然而,第二次运行(在我将最大运行时间增加到24小时后),我得到了#1093 - 表'experiencehistory'被指定了两次,既作为'DELETE'的目标,也作为数据的单独来源 At首先我想,也许这是因为所有重复项都被删除了,但事实并非如此。真烦人! – Hultin

+0

我已更新使用别名的答案.. – scaisEdge

相关问题