MySQL删除表中多余的重复记录,只保留一条记录

1、查询重复记录

SELECT * 
FROM 表名
WHERE 重复字段 IN (SELECT 重复字段 
   FROM 表名
   GROUP BY 重复字段 HAVING COUNT(重复字段)>1);

2、删除重复记录,但保留一条

DELETE FROM 表名
WHERE 重复字段 IN (SELECT 重复字段 
           FROM 表名
           GROUP BY 重复字段 HAVING COUNT(重复字段)>1)
      AND Id NOT IN (SELECT MIN(id) 
                     FROM 表名
                     GROUP BY 重复字段 HAVING COUNT(重复字段)>1);

3、案例

数据准备

CREATE TABLE T_Person(
pId INT PRIMARY KEY AUTO_INCREMENT,
pName VARCHAR(20)
);

INSERT INTO T_Person(pName) VALUES('陈一');
INSERT INTO T_Person(pName) VALUES('黄二');
INSERT INTO T_Person(pName) VALUES('张三');
INSERT INTO T_Person(pName) VALUES('张三');
INSERT INTO T_Person(pName) VALUES('李四');
INSERT INTO T_Person(pName) VALUES('李四');
INSERT INTO T_Person(pName) VALUES('王五');
INSERT INTO T_Person(pName) VALUES('赵六');
INSERT INTO T_Person(pName) VALUES('赵六');
INSERT INTO T_Person(pName) VALUES('钱七');
INSERT INTO T_Person(pName) VALUES('王五');
INSERT INTO T_Person(pName) VALUES('李四');
INSERT INTO T_Person(pName) VALUES('孙八');
INSERT INTO T_Person(pName) VALUES('杨九');
INSERT INTO T_Person(pName) VALUES('张三');
INSERT INTO T_Person(pName) VALUES('吴十');

SELECT * FROM T_Person;

这里写图片描述

上面共16条数据,查看包含重复姓名的记录都有哪些?

SELECT pName FROM T_Person GROUP BY pName HAVING COUNT(pName)>1;

这里写图片描述

情况1和情况2都是原来的16条数据的基础上做的。

情况1:删除所有重复数据,SQL语句如下:

DELETE FROM T_Person
WHERE pName IN (SELECT pName 
        FROM (SELECT pName 
              FROM T_Person 
              GROUP BY pName HAVING COUNT(pName)>1
        ) AS temp);

这里写图片描述

情况2:重复的数据只留一条,其它重复数据删除,SQL语句如下:

DELETE FROM T_Person
WHERE pName IN (SELECT pName 
        FROM (SELECT pName 
              FROM T_Person 
              GROUP BY pName HAVING COUNT(pName)>1
        ) AS temp)
      AND 
      pId NOT IN(
        SELECT pId 
        FROM (SELECT MIN(pId) AS pId,pName
              FROM T_Person
              GROUP BY pName HAVING COUNT(pName)>1
              ) AS temp2);

这里写图片描述

转载 :http://lsieun.blog.51cto.com/9210464/1813903

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值