首页 > 解决方案 > 如何删除重复行分组两列?

问题描述

我的数据库中有一个表(婴儿姓名),其中包含要删除的重复记录。

我表中的前记录

id category_id  baby_name   url_role    
1      6        karthik     karthik    
2      7        kalaivanan  kalaivanan    
3      4        arun        arun    
4      6        vijayakumar vijayakumar    
5      6        karthik     karthik    
6      6        karthik     karthik    
7      4        karthik     karthik
9      6        vijayakumar vijayakumar    
8      4        karthik     karthik

我需要结果

id category_id  baby_name   url_role    
1      6        karthik     karthik    
2      7        kalaivanan  kalaivanan    
3      4        arun        arun    
4      6        vijayakumar vijayakumar    
7      4        karthik     karthik

我需要删除在同一类别中发现的具有相同 baby_name 的重复记录。我不想为此创建一个包含不同条目的新表。我需要在不创建任何新表的情况下从现有表中删除重复条目。

DELETE FROM babynames 
    WHERE id NOT IN 
      (   SELECT MIN(id)  
            FROM babynames 
        GROUP BY baby_name,category_id
      )

标签: mysqlsql

解决方案


您可以使用EXISTS子句,注意将内部包装FROM到子查询中以避免可怕的

您不能在 FROM 子句中指定目标表“x”进行更新

错误:

DELETE b
FROM babynames b
WHERE EXISTS (SELECT * 
              FROM (SELECT * FROM babynames) b1 
              WHERE b1.category_id = b.category_id
                AND b1.baby_name = b.baby_name
                AND b1.id < b.id)

输出:

id  category_id     baby_name       url_role
1   6               karthik         karthik
2   7               kalaivanan      kalaivanan
3   4               arun            arun
4   6               vijayakumar     vijayakumar
7   4               karthik         karthik

dbfiddle 上的演示


推荐阅读