1

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

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

id | user | amount

1 | dillyg10 | 16
2 | dillyg10 | 18

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

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

4

2 回答 2

0

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

DELETE FROM test_table
      WHERE ID IN (SELECT   MAX (ID)
                       FROM test_table
                   GROUP BY user);
于 2013-10-01T04:02:46.943 回答
0

如果您想从每个用户的重复行中删除除具有最大 id 的行之外的所有行,那么您可以这样做

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演示

于 2013-10-01T04:39:12.067 回答