【问题标题】:delete duplicate entries in table [duplicate]删除表中的重复条目 [重复]
【发布时间】:2013-03-09 02:58:00
【问题描述】:

我想从下表中删除多个重复键:

id | name   | uid
1  | ekta   | 5
2  | ekta   | 5
3  | sharma | 10
4  | sharma | 10

希望它像

id | name   | uid
1  | ekta   | 5
3  | sharma | 10

我正在使用 mysql。可以吗。? 我不能使用unique constraint 查询来制作唯一的条目,因为我希望将这些重复的条目输入到表格中。

【问题讨论】:

标签: mysql sql stored-procedures sql-delete


【解决方案1】:

执行此操作的一种方法是使用LEFT JOIN 在子查询中加入表。对于每个UID,子查询获得最低的ID。当一条记录在子查询中没有匹配时,它只是意味着它没有匹配的记录,可以安全地删除。

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID
            FROM    TableName
            GROUP   BY uid
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID
WHERE   b.uid IS NULL

但是,如果UID 的记录可以有不同的名称,那么您需要在group by 子句中包含name,否则只会保留唯一的uid,而ID 最低。

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID, name
            FROM    TableName
            GROUP   BY uid, name
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID AND
                a.name = b.name
WHERE   b.uid IS NULL

【讨论】:

  • 我必须对相同的名称和 uid 进行罚款,然后必须删除重复的记录,所以它有点复杂。 :(
  • 不复杂,执行第一个delete语句。
  • 第二个正在按我的需要工作..非常感谢..!!!
【解决方案2】:
  DELETE DupRows.*
  FROM MyTable AS DupRows
  INNER JOIN (
            SELECT MIN(ID) AS minId, col1, col2
            FROM MyTable
            GROUP BY col1, col2
            HAVING COUNT(*) > 1
             ) AS SaveRows 
  ON SaveRows.col1 = DupRows.col1 AND SaveRows.col2 = DupRows.col2
  AND SaveRows.minId <> DupRows.ID;

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2014-08-01
    • 2016-08-30
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2014-08-17
    相关资源
    最近更新 更多