使用单个重复列从MySQL数据库中删除重复项

时间:2013-10-01 03:53:29

标签: mysql sql

所以我已经阅读了很多关于Stack Overflow的问题...我真的无法得到答案:(。我只使用MySQL大约4个月,所以我不是一个亲。

无论如何,我的表中的数据看起来与此类似......

id | user | amount

1 | dillyg10 | 16
2 | dillyg10 | 18

如您所见,用户字段已被复制。这在我的数据集中发生了很多,虽然我的表非常小,只有大约1000行。

所以如果你们能给我一些建议......我会非常感激,也会通过你在查询中所做的事情,我正在努力学习,希望我不必问这样的问题再次:)。

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询删除重复记录。

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

答案 1 :(得分: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 演示