我的数据库中有一个表(babynames),其中有我想要删除的重复记录。
我的表中的Ex记录
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
      )发布于 2019-02-08 11:08:41
在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;发布于 2019-02-08 11:40:36
您可以使用EXISTS子句,小心地将内部FROM包装到子查询中,以避免可怕的
不能在FROM子句中为update指定目标表'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发布于 2019-02-08 15:19:39
要从表中删除重复记录,您可以执行以下操作
delete from names 
where id not in 
(
select min(id)
from names 
group by category_id,baby_name,url_role 
  )https://stackoverflow.com/questions/54585433
复制相似问题