MySQL查询表内重复记录并删除
在日常业务场景中,经常会出现一个问题就是解决数据重复的问题,这里用到了一张用户表(s_user)做重复数据操作,分别包含了两个字段,id、name分别用于做唯一标示以及相同姓名的检索。

表结构以及测试数据
/*
Navicat MySQL Data Transfer Source Server : 120.25.170.205
Source Server Version : 50173
Source Host : 120.25.170.205:3306
Source Database : test Target Server Type : MYSQL
Target Server Version : 50173
File Encoding : 65001 Date: 2018-08-13 17:11:24
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for s_user
-- ----------------------------
DROP TABLE IF EXISTS `s_user`;
CREATE TABLE `s_user` (
`id` varchar(36) NOT NULL,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of s_user
-- ----------------------------
INSERT INTO `s_user` VALUES ('a53cb32a-9ed0-11e8-87f3-00163e064c72', '李四');
INSERT INTO `s_user` VALUES ('86badf60-9ea0-11e8-87f3-00163e064c72', '老王');
INSERT INTO `s_user` VALUES ('a50cb058-9ed0-11e8-87f3-00163e064c72', '李四');
INSERT INTO `s_user` VALUES ('8529ce40-9ea0-11e8-87f3-00163e064c72', '老万');
INSERT INTO `s_user` VALUES ('a2d7d40c-9ed0-11e8-87f3-00163e064c72', '张三');
INSERT INTO `s_user` VALUES ('801528a0-9ea0-11e8-87f3-00163e064c72', '李四');
INSERT INTO `s_user` VALUES ('a313915e-9ed0-11e8-87f3-00163e064c72', '张三');
INSERT INTO `s_user` VALUES ('79a27d1a-9ea0-11e8-87f3-00163e064c72', '张三');
小葵花课堂开课了
1、如何通过用户名检索出相同的用户信息
select name,count(s.id) from s_user s GROUP BY s.`name` HAVING count(s.`name`)>1

2、通过用户名检索出所有相同的用户信息并删除
delete from s_user
where name in (SELECT * from(select s.name from s_user s group by s.name having count(name) > 1)s)
and id not in (SELECT id from (select min(s.id)id from s_user s group by s.name having count(name)>1)a)

注意事项:由于子查询限制,如果子查询的 from 子句和更新、删除对象使用同一张表则需要在子查询外添加一个查询,否则会出现以下错误:
[Err] 1093 - You can't specify target table 's_user' for update in FROM clause
错误的查询:
delete from s_user
where name in (select s.name from s_user s group by s.name having count(name) > 1)
and id not in (SELECT id from (select min(s.id)id from s_user s group by s.name having count(name)>1)a)
正确的查询:
delete from s_user
where name in (SELECT * from(select s.name from s_user s group by s.name having count(name) > 1)s)
and id not in (SELECT id from (select min(s.id)id from s_user s group by s.name having count(name)>1)a)
MySQL查询表内重复记录并删除的更多相关文章
- MySQL查询表内重复记录
查询及删除重复记录的方法(一)1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select p ...
- SQL根据B表内容修改A表内容,查询表中重复记录,删除掉重复项只保留一条
以下sql是a,b两张表通过关联条件id修改a表值,如果b表有重复数据记录,选第一条更新,红色条件为附加限制条件,具体视情况而定: UPDATE a SETname = b.fname,pwd = b ...
- MySQL之——查询重复记录、删除重复记录方法大全
查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > ...
- 【MySQL】【1】表中存在重复记录,删除保留其中一条
--删除题库(TABLE_Q )中,标题(TITLE )和类型(TYPE )都相同的数据,仅保留ID最小的一条 DELETE TABLE_Q FROM TABLE_Q, ( ) T2 WHERE TA ...
- 京东联盟开发(12)——删除MySQL表中重复记录并且只保留一条
本文介绍如何删除商品表中的一些重复记录. 有时,一条商品由于有多个skuid,比如某种手机有不同颜色,但价格.优惠等信息却是一致,导致其被多次收录.由于其各种条件基本类似,这样它在商品中多个sku都排 ...
- sql查询重复记录、删除重复记录方法大全
查找所有重复标题的记录:SELECT *FROM t_info aWHERE ((SELECT COUNT(*)FROM t_infoWHERE Title = a.Title) > 1)ORD ...
- SQL查询重复记录、删除重复记录方法
查找所有重复标题的记录:SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1 ...
- ELK+MySQL出现大量重复记录问题处理
一.使用Logstash使用jdbc从MySQL读取数据操作 1.1 安装jdbc插件 jdbc默认已安装,如果没安装使用logstash-plugin安装即可(logstash-plugin在log ...
- mysql中去重复记录
Distinct 这个只能放在查询语句的最前面 参考 : https://www.cnblogs.com/lushilin/p/6187743.html
随机推荐
- oracle建立用户与授权(转载)
创建表空间及用户: create tablespace 表空间名 datafile 'd:/seal.dbf' size 10M autoextend on;create user username ...
- Nginx加状态监控
安装Nginx时加上 –with-http_stub_status_module 在nginx.conf server location /nginx_status { stub_sta ...
- selenium+python+pycharm环境搭建
1.安装python,配置path环境变量,验证python安装成功与否 2.安装Pycharm:Pycharm是Python的IDE,所以我们需要安装一下:下载安装Selenium 3.在官网(ht ...
- clutter recoder
cin >> ch; cin.get(ch);区别读取输入是否忽略空格.制表等; char ch; ; cout << "Enter characters;enter ...
- 新浪微博Oauth2.0授权 获取Access Token
新浪微博开放平台提供了丰富的API接口,利用这些接口,开发者能够开发出独具特色的微博应用.但是,大部分接口都需要用户授权给应用,应用利用授权得到的Access Token来调用相应的接口来获取内容. ...
- 爬虫验证码处理与IP处理
引入 相关的门户网站在进行登录的时候,如果用户连续登录的次数超过3次或者5次的时候,就会在登录页中动态生成验证码.通过验证码达到分流和反爬的效果. - 1.对携带验证码的页面数据进行抓取 - 2.可以 ...
- LeetCode题解 #1 Two Sum
在LeetCode做的第一到题 题目大意:给出n个数,在其中找出和为一个特定数的两个数. Input: numbers={2, 7, 11, 15}, target=9Output: index1=1 ...
- JavaScript Post提交数据并跳转到页面(模拟Form表单提交)
function GotoWatchTicketCode() { var orderID='@ViewBag.OrderInfo.OrderID'; var phoneNum='@ViewBag.Or ...
- 你应该使用 Django admin 的 9 个理由(转)
你应该使用 Django admin 的 9 个理由 “问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制.”—来自 Reddit 的 andybak 我 ...
- Sublime Text:初学者不知道的那些事
来源:Duchessjojo@译言 我是Sublime Text代码编辑器的忠实粉丝.我和诸多Mac程序员一样,最初使用的是Textmate代码编辑器.在Sublime Text 2发行后,我才开始转 ...