2012-03-31 64 views
1

考虑下表“鸣叫”如何从数据库中删除重复的条目?

tweet_id call_id id_str timestamp text 
-------------------------------------------------- 
1   11  12345 312323134 lorem ipsum 
2   11  12345 312323134 lorem ipsum 
3   11  12345 312323134 lorem ipsum 
4   11  12345 312323134 lorem ipsum 
5   11  67890 325565454 dolor 
6   11  34355 333544664 samet 

每鸣叫应仅在数据库中出现一次。正如你所看到的,除了tweet_id(它是一个自动编号字段)之外,完全相同的tweet(相同的call_id,id_str,时间戳和文本 - 除此之外所有内容都是相同的)已被存储4次(!)

有没有一种方法可以精确匹配(所以:除了tweet_id以外,其他都一样),然后删除最后一个x - 1(这里:4 -1 = 3)?换句话说,在清理表看起来像

tweet_id call_id id_str timestamp text 
-------------------------------------------------- 
1   11  12345 312323134 lorem ipsum 
5   11  67890 325565454 dolor 
6   11  34355 333544664 samet 

我希望有一个简单的方法来做到这一点,否则我有一个巨大的问题(显示你其实你之前想到的一个小时是什么把建立你的数据库可以做!)

+0

这个问题必须被回答了百万次。 – usr 2012-03-31 21:10:29

回答

3

你问这个问题之前,你在网上搜索的解决方案?如果不在这里是一个关于如何做到这一点的在线教程。

http://www.sqlteam.com/article/deleting-duplicate-records

+0

谢谢你。 (i)我已经将tweets表格复制到tweets_new中(ii)在tweets_new中,我删除了tweet_id列(iii)我创建了一个名为tweets_distinct的表格,其结构与tweets_new相同(iv)在教程之后,我认为应该这样做绝招:'SELECT DISTINCT * INTO tweets_distinct FROM tweets_new' - 但是,我收到一个错误:'#1327 - Undeclared variable:tweets_distinct'。我不明白,因为我双重和三重检查,但tweets_distinct表真的存在(没有拼写错误或什么的)。你的想法请:-) – Pr0no 2012-03-31 22:25:36

+0

P.S.我可以很容易地删除tweet_id列,因为它尚未被引用到任何地方。因此,我可以先创建一个清理好的表格,然后再插入一个auto_increment字段,用于对推文进行编号。 – Pr0no 2012-03-31 22:31:17

+1

是的,如果它没有被引用,你可以很容易地删除它 – 2012-03-31 22:41:08

2

最简单的办法是将新表的清理的数据复制,删除旧,把洁净重新回到旧。

,以获得独特的项目,你可以很容易做到:

select max(tweet_id) as tweet_id, call_id, id_str, timestamp, text from tbl group by call_id, id_str, timestamp, text