新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 ...
随机推荐
- for循环使用element的折叠面板遇到的问题-2
需求:每次添加一个折叠面板时,让最新的折叠面板展开,其余的关闭 动态控制展开折叠面板,首先绑定name,v-model = activeName 我们的项目中是当添加折叠面板时,直接push进这个数组 ...
- 矩阵的运算:Python语言实现
一.矩阵的加减法 import numpy as np #这里是矩阵的加法 ar1=np.arange(10).reshape(10,1) ar1 ar2=np.arange(10).reshape( ...
- ListenAndServe源码剖析
使用goland追踪阅读ListenAndServe源码,剖析服务器启动流程 ListenAndServe阅读 func ListenAndServe(addr string, handler Han ...
- tomcat9启动后控制台输出乱码问题
修改Tomcat9下 /conf/logging.properties 文件 找到java.util.logging.ConsoleHandler.encoding=utf-8 改成GBK 或者注释掉
- MySQL数据篇(九)--存储过程实现定时每天清理过期数据
需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录.现在写一个存储过程实现,如果活动过期,就将关联表里面的数据标 ...
- Java读写Excel文件,利用POI
直接看工具类代码吧, package com.example.demo.util; import com.example.demo.entity.ExcelDataVO; import org.apa ...
- Acwing43 不分行从上往下打印二叉树
地址 https://www.acwing.com/problem/content/description/41/ 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. 样例 输入如下 ...
- bzoj3293 分金币
题目链接 problem 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使 得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. so ...
- CSP 2019 游记
Day -32 开坑. 没什么好说的,等个 5 天等初赛(应该叫第一轮认证)挂掉之后就能弃坑了. 今天开始停课,虽然每天只停半天,但是感觉还是特别的舒服~ 然而得等初赛过了才能全天停课-- 没关系,熬 ...
- 【微信小程序】mpvue中页面之间传值(全网唯一真正可行的方法,中指推了一下隐形眼镜)
摘要: mpvue中页面之间传值(注意:是页面之间,不是组件之间) 场景:A页面跳转B页面,在B页面选择商品,将商品名带回A页面并显示 使用api: getCurrentPages step1: A页 ...