首页 > 数据库技术 > 详细

MySQL中删除重复数据时保留一行

时间:2020-06-17 22:26:55      阅读:94      评论:0      收藏:0      [点我收藏+]

不管是在测试中还是面试中,总是会遇到这种场景,某个数据表中的数据存在重复,要求删除重复数据时,保留一行。接下来,我给大家演示一下,如何写出符合要求的SQL语句。

1、首先,创建一个数据表SC,建表语句如下:

CREATE TABLE sc (
id INT PRIMARY KEY auto_increment,
SNO VARCHAR(3) NOT NULL,
CNO VARCHAR(5) NOT NULL,
DEGREE NUMERIC(10, 1) NOT NULL
);

2、接着插入一些数据,这些数据中有一部分是重复的。

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,‘3-245‘,86);

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (105,‘3-245‘,75);

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (109,‘3-245‘,68);

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,‘3-245‘,86);

INSERT INTO SCORE(SNO,CNO,DEGREE)VALUES (103,‘3-245‘,86);

3、查询SC表中的重复数据

SELECT SNO,CNO ,COUNT(*)
FROM sc
GROUP BY sno,cno
HAVING COUNT(*)>1;

显示结果如下:

技术分享图片

 

 4、删除重复数据,写了如下SQL语句:

DELETE FROM sc WHERE sno in(
SELECT SNO
FROM sc
GROUP BY sno,cno
HAVING COUNT(*)>1);

运行时,发现报错,具体报错信息如下:

技术分享图片

 

 也就是说,在同一张表上不能在统计查询的时候,进行删除操作。

那么,我就想到了命名别名的方式,避免这个问题,于是写了如下SQL

DELETE FROM sc
WHERE sno in(SELECT sno FROM (SELECT sno
FROM sc
GROUP BY sno,cno
HAVING COUNT(*)>1)as a);

运行之后,重复数据删除了,但是全部删除了,没有保留数据,而我的本意是在删除重复数据的时候,希望保留一条记录的,于是在上面的SQL语句基础上做了完善,具体SQL语句如下:

DELETE FROM sc
WHERE sno in(SELECT sno FROM (SELECT sno
FROM sc
GROUP BY sno,cno
HAVING COUNT(*)>1)as a)
and ID not in(SELECT MIN(id)FROM
(SELECT id FROM sc GROUP BY sno,cno
HAVING COUNT(sno)>1)b );

这么写了SQL之后,我的问题完美的解决了,删除了重复数据的同时,保留了一条记录。

MySQL中删除重复数据时保留一行

原文:https://www.cnblogs.com/jane4321/p/13154673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!