mysql - 使用SQL删除表中的重复记录

标签 mysql sql sql-server sql-server-2008

<分区>

所以我这里有一种情况需要删除重复的记录。 这里的场景是我有 5 个关键字段。 4 个字段是实际数据,第 5 个字段是自动生成的唯一编号。 因此,当我仅使用这 4 个字段检查使用组的计数时,我有大约 400 条记录的副本。但是这些重复记录的唯一编号是不同的(我们可以删除唯一编号具有最大值的记录)。 有没有办法删除这些重复的记录? 还有其他 6 个非主键字段,但它们仅供引用。

比如说:

+----------+-------+---------+---------+-----------+
| Field    | Field | Field 3 | Field 4 | Unique,Id |
|   1      |   2   |         |         |           |
+----------+-------+---------+---------+-----------+
| Batman   | 100   | 50      | Chicago | 100       |
+----------+-------+---------+---------+-----------+
| Batman   | 100   | 50      | Chicago | 101       |
+----------+-------+---------+---------+-----------+
| Superman | 50    | 50      | Florida | 102       |
+----------+-------+---------+---------+-----------+
| Flash    | 90    | 40      | London  | 103       |
+----------+-------+---------+---------+-----------+
| Flash    | 90    | 40      | London  | 104       |
+----------+-------+---------+---------+-----------+

在此示例中,前 4 个字段是实际数据字段。

所以你可以看到 Batman 和 flash 有重复的值(对于前 4 个字段)但是唯一 ID 不同。所以在这里我需要从每条记录中删除一条记录,这样它们就不会重复。可以删除该重复记录的唯一 ID 的最大值。所以 102 和 104 是 bat 侠和闪电侠的最大唯一 ID 值,应该删除它们。

请帮我解决这个问题。

最佳答案

请尝试这个查询:

DELETE 
FROM 
    MYTABLE 
FROM 
    MYTABLE
LEFT JOIN
(
SELECT 
    FIELD1,FIELD2,FIELD3,FIELD4,MIN(ID) AS ID
FROM
    MYTABLE
GROUP BY 
    FIELD1,FIELD2,FIELD3,FIELD4
)TbMain
ON 
    MYTABLE.FIELD1=TbMain.FIELD1
    AND
    MYTABLE.FIELD2=TbMain.FIELD2
    AND
    MYTABLE.FIELD3=TbMain.FIELD3
    AND
    MYTABLE.ID =TbMain.ID
WHERE
    TbMain.ID IS NULL

关于mysql - 使用SQL删除表中的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37343310/

相关文章:

php - 带有 zend 框架的 IN() 子句中的多列

php - 根据给定的 ID 使用相同的值更新表

c# - EF 6.0 多对多插入这么多编码......为什么?

sql - 从 Getdate() 获取时间

java - 在 hibernate 中获取不重复的行

java - 在 mssql 的情况下,metadata.getTables 结果集为空

php - 用另一个数据库的结果填充数据库?

java - 尝试使用 Hibernate 保留实体时出错(MappingException : Unknown entity)

mysql - 内部连接函数重复内容

mysql - MySQL 查询出错