【问题标题】:Delete duplicate rows from DB table [duplicate]从数据库表中删除重复行 [重复]
【发布时间】:2012-03-28 21:43:04
【问题描述】:

可能重复:
SQL - How can I remove duplicate rows?
Deleting duplicate rows from a table

这是我的情况

我有一个名为 result 的表,看起来像这样

Id  Valeur   IdUtilisateur     Date      IdUnit    IdMea   IdAnalyte
1   0.440     patlach01    2012-01-02      2      39258    2541
2   0.440     patlach01    2012-01-02      2      39258    2541
3   0.440     patlach01    2012-01-02      2      39258    2541

如您所见,我有相似的行但不同的 id(身份设置为 yes 所以 id 增加自动)

我想删除不需要的行但只保留 1 个样本

IdUnitIdMeaIdAnalyte 用于其他表

我该怎么做?

而且我想为所有其他情况制作它(是的,bd 是一团糟,很多重复)所以我想成为“通用”并在 1 次操作中完成工作(如果可能的话)

对不起,如果我不够清楚,这是我在这里的第一篇文章!!!!

【问题讨论】:

  • 如果 'id' 是一个标识列,为什么所有行都显示相同的 'id' 值? 'id' 是否明确设置?或者你的意思是原始数据表有一个标识列被复制到“结果”表中?

标签: sql


【解决方案1】:

MYSQL中你可以这样使用:

DELETE a FROM table a, table b 
WHERE a.id > b.id 
AND a.IdUtilisateur = b.IdUtilisateur

DELETE FROM table
WHERE id NOT IN 
(SELECT * FROM (SELECT MIN(a.id) FROM table a 
GROUP BY a.IdUtilisateur) b)

注意: table 是您的表格的名称。

希望这会有所帮助。

【讨论】:

  • 是的,它真的很有帮助!!!!感谢您的快速答复!!!!!!
【解决方案2】:
DELETE FROM Table
WHERE ID NOT IN
(SELECT A.RowId FROM
 (SELECT Id,MAX(ID) AS RowId
  FROM Table
  GROUP BY ID
 ) A
);

假设这是MYSQL,我给出了解决方案。

P.S: where 子句中的 ID 是我们在 MYSQL 中使用的 ROWID。

【讨论】:

  • 谢谢大家!!我接受了你所有的提示,它完全按照我的需要工作。我只需要删除约束,执行删除然后添加约束。我明天会在其他选项卡上删除子引用。
猜你喜欢
  • 2014-06-01
  • 2012-01-01
  • 2012-10-21
  • 2015-07-02
  • 2019-07-28
  • 2010-11-05
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多