【问题标题】:Delete rows with duplicated/repeated data in specified columns删除指定列中具有重复/重复数据的行
【发布时间】:2016-04-17 20:55:58
【问题描述】:

我需要删除重复记录(仅当 cod1 和模型重复时)并只保存其中一个。

ID Cod1 Model
1   332  mdl1
2   332  mdl1
3   332  mdl2
4   450  mdl2
5   450  mdl2

输出必须是

ID  Cod1  Model
1    332  mdl1
3    332  mdl2
4    450  mdl2

非常感谢!

【问题讨论】:

    标签: mysql field records


    【解决方案1】:

    试试这个。将出现的Table1 替换为您的实际表名。

    DELETE FROM Table1 WHERE ID IN
    (SELECT * FROM 
       (SELECT T2.Id
        FROM Table1 T1
        INNER JOIN Table1 T2 
        ON T1.Cod1 = T2.Cod1 AND T1.Model = T2.Model
        WHERE T2.ID > T1.ID
        )T
    );
    

    sqlfiddle

    在最里面的查询中,当 Cod1 和 Model 匹配时,T1 会找到匹配的 T2 记录,并且 T2.Id 将是较大的 id。所以它返回要删除的行的 ID。但是 Mysql 不允许您从来自同一个表的查询中删除,因此我们必须将其包装在另一个 SELECT 语句中以欺骗 Mysql 让您这样做。就是这样。

    【讨论】:

    • 出色的创意和示例,完美运行。真的谢谢。
    猜你喜欢
    • 2013-01-03
    • 2015-05-25
    • 2018-04-20
    • 2014-07-12
    • 1970-01-01
    • 2021-12-16
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多