【问题标题】:How removing duplicate rows Group two columns?如何删除重复行分组两列?
【发布时间】:2019-07-02 06:48:36
【问题描述】:

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

我的表中的前记录

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
      )

【问题讨论】:

标签: mysql sql


【解决方案1】:

在 MySQL 中,您应该使用 JOIN:

DELETE b
    FROM babynames b LEFT JOIN
         (SELECT baby_name, category_id, MIN(id) as min_id
          FROM babynames 
          GROUP BY baby_name,category_id
         ) bb
         ON bb.min_id = b.id
    WHERE bb.min_id IS NULL;

【讨论】:

    【解决方案2】:

    您可以使用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
    

    Demo on dbfiddle

    【讨论】:

      【解决方案3】:

      要从表中删除重复记录,您可以执行以下操作

      delete from names 
      where id not in 
      (
      select min(id)
      from names 
      group by category_id,baby_name,url_role 
      
        )
      

      【讨论】:

        【解决方案4】:

        请试试这个

         DELETE FROM babynames 
           WHERE id   IN 
                          (  
                          select id from (SELECT id ,  RANK() OVER (PARTITION BY baby_name,category_id
                         ORDER BY  sale DESC  )rw sales_rank FROM babynames)t1 where rw>1
                          ) 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-06
          • 2020-03-17
          • 2014-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多