新MySQL查询和删除重复记录
下面,以一个小例子来说明:
1、创建学生表
1 CREATE TABLE student(
2 id INT PRIMARY KEY,
3 stuno VARCHAR(12) NOT NULL,
4 stuname VARCHAR(30) NOT null
5 );
2、向学生表中插入数据

1 INSERT INTO student VALUES ('1','131111099','小李');
2 INSERT INTO student VALUES ('2','131111100','小陈');
3 INSERT INTO student VALUES ('3','131111101','小王');
4 INSERT INTO student VALUES ('4','131111102','小黑');
5 INSERT INTO student VALUES ('5','131111099','小曹');
6 INSERT INTO student VALUES ('6','131111099','小李');

3、查找仅学号重复的记录
从插入记录上看,id为1、5、6的记录学号都是相同的,那么验证一下查询的数据是否正确

1 -- 学号重复
2 -- 先按学号进行分组,然后查询学数量 > 1的记录的学号
3 SELECT * FROM student WHERE stuno IN (
4 -- 查找重复的学号
5 SELECT stuno FROM student GROUP BY stuno HAVING COUNT(stuno) > 1
6 );

查询结果如下:

查询结果和我们事先分析的数据一致,所以查询结果是正确的。
4、查找学号和姓名均重复的记录
从插入记录上看,只有id为1、6的记录学号和姓名是完全重复的,那么验证一下查询的数据是否正确

1 -- 学号和姓名均重复
2 SELECT * FROM student WHERE (stuno,stuname) -- 注意:此处一定要加括号,当成联合字段来处理
3 IN (
4 -- 查找学号和姓名均重复的学生信息
5 SELECT stuno,stuname FROM student GROUP BY stuno,stuname HAVING COUNT(1) > 1
6 );

查询结果如下:

查询结果和我们事先分析的数据一致,所以查询结果是正确的。
5、删除多余的重复记录(多个字段),只保留最小id的记录
重复记录可能有多条,但是我们只希望保留id最小的那条记录,因为学号和姓名均重复的只有id为1、6的记录,保留id为1的记录,那么验证一下查询的数据是否正确

1 -- 删除多余的重复记录(多个字段),只保留最小id的记录
2 DELETE FROM student WHERE id IN (
3 SELECT * FROM (
4 SELECT id FROM student WHERE (stuno,stuname) -- 注意:此处一定要加括号,当成联合字段来处理
5 IN (
6 -- 查找学号和姓名均重复的学生信息
7 SELECT stuno,stuname FROM student GROUP BY stuno,stuname HAVING COUNT(1) > 1
8 ) AND id NOT IN (
9 -- 查询最小id的记录
10 SELECT MIN(id) FROM student GROUP BY stuno,stuname HAVING COUNT(1) > 1
11 )
12 ) AS stu_repeat_copy
13
14 );
查询结果如下:

可以看出,id为6的记录已经被删除了,所以结果正确
警告:不能根据本表的查询结果来更新本表的数据
新MySQL查询和删除重复记录的更多相关文章
- MySQL查询及删除重复记录的方法
查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...
- [SQL]查询及删除重复记录的SQL语句
一:查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...
- Oracle 查询并删除重复记录的SQL语句
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select ...
- oracle_SQL 实验查询及删除重复记录 依据条件 (row)
除数据库表中的重复记录 根据条件 ① 创建表准备数据 创建表 tab_test -- Create table create table TAB_TEST ( ID NUMBER, NAME NVAR ...
- oracle 查询及删除重复记录的SQL语句
查询及删除重复记录的SQL语句 1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group ...
- MySQL中查询、删除重复记录的方法大全
查找所有重复标题的记录: select title,count(*) as count from user_table group by title having count>1; SELECT ...
- SQL操作语句之查询及删除重复记录的方法
delete from 表 where id not in(select min(id) from 表 group by name ) //删除重复名字的记录 删除之前请用语句 select * fr ...
- MySQL查询和删除重复数据
删除表中重复记录,只保留一条: delete from 表名 where 字段ID in (select * from (select max(字段ID) from 表名 group by 重复的字段 ...
- 查询及删除重复记录的SQL语句
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select peopleId from ...
随机推荐
- scp跨服务器拷贝,后台运行
[转载]原文:https://blog.csdn.net/u013091013/article/details/68941250 通常情况下,我门在同一台服务器拷贝数据最常用的命令便是cp,如果要在不 ...
- CentOS7 忘记Root密码解决方法
1- 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linux 16的那一行,将ro改为rw init=/sysroot/bin/sh 4 - 现在 ...
- 201871010113-刘兴瑞《面向对象程序设计(java)》第十四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- 解决“QGtkStyle could not resolve GTK……”问题
如果出现错误 QGtkStyle could not resolve GTK. Make sure you have installed the proper libraries 或者出现错误 err ...
- CF414D Mashmokh and Water Tanks
CF414D Mashmokh and Water Tanks 洛谷评测传送门 题目描述 Mashmokh is playing a new game. In the beginning he has ...
- WPF 快捷键
原文:WPF 快捷键 <p><pre name="code" class="csharp"> 前台 <Window.Resourc ...
- 推荐一款可以直接下载浏览器sources资源的Chrome插件
github地址:https://github.com/up209d/ResourcesSaverExt 经常在仿站的时候回遇到下载别人的图片.css.js等资源,发现要一个个的手动下载.直接使用仿站 ...
- golang数据结构之冒泡排序
//BubbleSort 冒泡排序 func BubbleSort(arr *[]int) { ; i >= ; i-- { ; j-- { if (*arr)[j] > (*arr)[i ...
- 百度API车牌识别——Restful方式
源码下载地址:https://download.csdn.net/download/redhat588/11798294 Delphi xe 10.3.2 for windows 7 环境编译通过! ...
- MongoDB for OPS 03:分片 shard 集群
写在前面的话 上一节的复制集也就是主从能够解决我们高可用和数据安全性问题,但是无法解决我们的性能瓶颈问题.所以针对性能瓶颈,我们需要采用分布式架构,也就是分片集群,sharding cluster! ...