删除重复的条目从条件的数据库
我有一个很好的环顾四周,但havnt能够找到一个解决方案,所以希望有人可以帮助这个。删除重复的条目从条件的数据库
我有一个内部的记录应用程序从一个例行检查记录结果结果的MySQL表,还有一些检查程序的其中与追踪列标识:
id (int)(PK), tracker (int), time (timestamp), result (int)
一个唯一的结果如果前面的结果不一样,需要记录,只需要捕获变化。不幸的是,它在一个月前被建立(匆忙)时被忽略,并且结果被盲目记录,没有检查以前的结果。现在已经记录下来了,但我仍然留下了几千行,其中有很多是重复的条目,而我正在清除这些内容以便留下更改点。
因此,我需要浏览每一行,查看该跟踪器记录的以前的结果,并删除该行(如果它相同),这有点超出了我对MySQL的使用经验,并且迄今为止所做的尝试都有相当差!
任何人都可以帮忙吗?
用途:
DELETE a
FROM YOUR_TABLE a
LEFT JOIN (SELECT MAX(t.id) AS latest_id
FROM YOUR_TABLE t
GROUP BY t.tracker, t.result) b ON b.latest_id = a.id
WHERE b.latest_id IS NULL
交替使用IN:
DELETE FROM YOUR_TABLE
WHERE id NOT IN (SELECT x.latest_id
FROM (SELECT MAX(t.id) AS latest_id
FROM YOUR_TABLE t
GROUP BY t.tracker, t.result) x)
有人抱怨说这个执行速度很慢,但这可能不会影响到你。它必将是比什么都更快,你可以这样做:
select DISTINCT id, tracker, time, result
from table;
我需要记录结果的任何和所有变化,所以这不会工作不幸。 – Duncan 2010-09-16 04:02:05
我想你想在桌子上唯一索引:
ALTER IGNORE TABLE table ADD UNIQUE INDEX (tracker, time, result)
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
当您添加新行时,您必须使用INSERT IGNORE...
,因为插入会复制现有(跟踪器,时间,结果)键会导致错误。
它没有明确说明,但OP的确如此打算阅读......但您无法应用约束,直到数据满足为止。 OP表示他们想要删除重复的... – 2010-09-16 03:22:10
我对这些行有想法以便将来录制,但是几分钟后捕获的结果仍会产生新行,即使结果与时间不同也是如此一定? – Duncan 2010-09-16 04:05:41
排名第一的是我之后做的,减少了大约90%的行数,这肯定会使查询和备份更快。非常感谢! – Duncan 2010-09-16 04:00:19
为什么你需要第二个建议查询中的包装子查询? – MattSmith 2010-09-16 05:50:16
@MattSmith:如果没有包装,你会得到MySQL#1093有关引用变异表的错误。 – 2010-09-16 15:29:30