2013-10-01 51 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