2012-03-31 134 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