2013-10-01 88 views
1

所以我已經通讀了很多關於這個的Stack Overflow問題......並且我真的無法得到我的答案:(我只使用MySQL約4個月,所以我不完全是一個親。從一個MySQL數據庫中刪除重複的單個重複列表

不管怎麼說,我有我的表中的數據,看起來類似這樣的東西...

id | user | amount 

1 | dillyg10 | 16 
2 | dillyg10 | 18 

正如你所看到的,用戶域這在我的數據集中發生了很多,雖然我的表格非常小​​,只有大約1000行。所以,如果你們可以給我一些建議......我會很感激它,也會經歷你在查詢中所做的事情,我正在努力學習,希望我不會再問這樣的問題:) 。

+0

什麼記錄了兩個,你表現出你要刪除嗎?他們有不同的'金額'值。你想對此做什麼?或者你只是不在乎哪個記錄保持? – peterm

+0

我想刪除桌上的第一條記錄。 – user872129

+0

什麼定義了哪兩個是第一個記錄? – mavrosxristoforos

回答

0

您可以使用下面的查詢來刪除重複的記錄。

DELETE FROM test_table 
     WHERE ID IN (SELECT MAX (ID) 
         FROM test_table 
        GROUP BY user); 
+2

如果每個用戶有兩個重複記錄,則這是一個解決方案。如果還有更多,並且應該是一個,那麼將'where id in'更改爲'where id not in'將執行該任務。 – Alexey

+1

我試圖做到這一點,並且出現以下錯誤:您無法在FROM子句中爲更新指定目標表'testingdupes'。 – user872129

0

如果你想用最大號了每個用戶重複行的全部刪除,但一排,那麼你可以做這樣的

DELETE t 
    FROM table1 t JOIN 
(
    SELECT user, MAX(id) id 
    FROM table1 
    GROUP BY user 
    HAVING COUNT(*) > 1 
) q 
    ON t.user = q.user 
    AND t.id <> q.id 

這裏是SQLFiddle演示

另一方面,如果您希望在重複行中留下最大數量的行

DELETE t 
    FROM table1 t JOIN 
(
    SELECT i.id, i.user, i.amount 
    FROM 
    (
    SELECT user, MAX(amount) amount 
     FROM table1 
    GROUP BY user 
    HAVING COUNT(*) > 1 
) p JOIN table1 i 
     ON p.user = i.user 
    AND p.amount = i.amount 
) q 
    ON t.user = q.user 
    AND t.amount <> q.amount 
    OR (t.amount = q.amount 
     AND t.id < q.id) 

這裏是SQLFiddle演示

+0

@ user872129它有幫助嗎? – peterm