在MySql中基于两列删除重复记录

10
我希望您能够删除多余的重复记录。例如,在所示图像中,有两个具有 corporate_id = 5category_id = 19 的记录。如何删除任何一个重复的行(这里 corporate_sed_id 是主键)。

enter image description here

1个回答

15

请使用此代码:

DELETE
FROM
    corporate
WHERE
    corporate_sed_id IN(
    SELECT
        *
    FROM
        (
        SELECT
            MIN(corporate_sed_id)
        FROM
            corporate
        GROUP BY
            corporate_id,
            category_id
        HAVING
            COUNT(corporate_sed_id) > 1
    ) temp
)

1
我已经通过不同的方式解决了这个问题,但只是为了检查您的解决方案,我执行了这个查询,结果非常好:) 谢谢@nikita - K Arun Singh
@KArunSingh 如果您能分享您的解决方案就太好了... - theberzi
3
如果有多个相同的id,这只会删除一个重复项,对吗?人们需要多次运行它才能删除所有重复项。有没有一种方法可以使其适用于任意数量的重复项(即仅保留一个)? - theberzi
如果你没有一个ID,就像在数据透视表中一样,它也是无用的。 - Tofandel
1
@theberzi,你可以将IN切换为NOT IN。如果你运行select *,它将从重复项中返回最小的corporate_sed_id,这意味着如果你只想留下一个重复项,NOT IN就可以解决问题。虽然你还需要再次检查HAVING条件,以防止混合数据没有重复项。 - Shira Ishikawa
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接