首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除重复行对两列进行分组?

如何删除重复行对两列进行分组?
EN

Stack Overflow用户
提问于 2019-02-08 10:54:28
回答 4查看 49关注 0票数 1

我的数据库中有一个表(babynames),其中有我想要删除的重复记录。

我的表中的Ex记录

代码语言:javascript
运行
复制
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

我需要结果

代码语言:javascript
运行
复制
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的相同类别中发现的重复记录。我不想为此创建一个具有不同条目的新表。我需要从现有的表中删除重复的条目,而不需要创建任何新表。

代码语言:javascript
运行
复制
DELETE FROM babynames 
    WHERE id NOT IN 
      (   SELECT MIN(id)  
            FROM babynames 
        GROUP BY baby_name,category_id
      )
EN

回答 4

Stack Overflow用户

发布于 2019-02-08 11:08:41

在MySQL中,您应该使用JOIN

代码语言:javascript
运行
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2019-02-08 11:40:36

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

不能在FROM子句中为update指定目标表'x‘

错误:

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
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

票数 0
EN

Stack Overflow用户

发布于 2019-02-08 15:19:39

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

代码语言:javascript
运行
复制
delete from names 
where id not in 
(
select min(id)
from names 
group by category_id,baby_name,url_role 

  )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54585433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档