面试题: mysql 数据库去重 已看1 不好使
mysql去重面试总结
前言:题目大概是这样的。
建表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
CREATE TABLE `test2` ( `id` int (11) NOT NULL AUTO_INCREMENT, `peopleId` int (11) DEFAULT NULL , ` name ` varchar (255) DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of test2 -- ---------------------------- INSERT INTO `test2` VALUES ( '1' , '1' , '倒一' ); INSERT INTO `test2` VALUES ( '2' , '1' , '倒一' ); INSERT INTO `test2` VALUES ( '3' , '3' , '等等' ); INSERT INTO `test2` VALUES ( '4' , '2' , '421' ); INSERT INTO `test2` VALUES ( '5' , '2' , '421' ); INSERT INTO `test2` VALUES ( '6' , '2' , '421' ); |
1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断
网上答案:select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1)
mysql:select * from test2 where id in (select id from test2 group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
网上答案:DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM 表 GROUP BY id HAVING COUNT(*) > 1);
mysql:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
DELETE FROM test2 WHERE peopleId IN ( select a.peopleId FROM ( SELECT * FROM test2 GROUP BY peopleId HAVING count (peopleId) > 1 )a ) AND id NOT IN ( select b.id FROM ( SELECT * FROM test2 GROUP BY name HAVING count ( name ) > 1 )b ) |
3、查找表中多余的重复记录(多个字段)
select * from 表 a where (a.Id,a.seq) in(select Id,seq from 表 group by Id,seq having count(*) > 1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SELECT * FROM test3 a WHERE (a.id, a.seq) IN ( SELECT id, seq FROM test3 GROUP BY id, seq HAVING count (*) > 1 ) |
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count() > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count()>1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
DELETE FROM test3 WHERE (id, seq) IN ( SELECT a.id, a.seq FROM ( SELECT id, seq FROM test3 GROUP BY id, seq HAVING count (*) > 1 ) a ) AND (id, seq, ` name `) NOT IN ( SELECT b.* FROM ( SELECT * FROM test3 GROUP BY id, seq HAVING count (*) > 1 ) b ) |
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from 表 a where (a.Id,a.seq) in (select Id,seq from 表 group by Id,seq having count() > 1) and rowid not in (select min(rowid) from 表 group by Id,seq having count()>1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
select * FROM test3 WHERE (id, seq) IN ( SELECT a.id, a.seq FROM ( SELECT id, seq FROM test3 GROUP BY id, seq HAVING count (*) > 1 ) a ) AND (id, seq, ` name `) NOT IN ( SELECT b.* FROM ( SELECT * FROM test3 GROUP BY id, seq HAVING count (*) > 1 ) b ) |
胜负查询:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
CREATE TABLE `t_game` ( `game_date` varchar (255) DEFAULT NULL , `game_res` varchar (255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of t_game -- ---------------------------- INSERT INTO `t_game` VALUES ( '2018-03-20' , '胜' ); INSERT INTO `t_game` VALUES ( '2018-03-20' , '胜' ); INSERT INTO `t_game` VALUES ( '2018-03-20' , '负' ); INSERT INTO `t_game` VALUES ( '2018-03-21' , '负' ); INSERT INTO `t_game` VALUES ( '2018-03-21' , '胜' ); INSERT INTO `t_game` VALUES ( '2018-03-21' , '负' ); |
1
2
3
|
select game_date,( select count (*) from t_game where game_date = t.game_date and game_res = '胜' ) as '胜' ,( select count (*) from t_game where game_date = t.game_date and game_res = '负' ) as '负' from t_game as t group by game_date; |
总结
1、delete不能有别名
2、mysql不支持又查又改,要用临时表
3、mysql不支持rowid
面试题: mysql 数据库去重 已看1 不好使的更多相关文章
- MySQL数据库去重 SQL解决
MySQL数据库去重的方法 数据库最近有很多重复的数据,数据量还有点大,本想着用代码解决,后来发现用SQL就能解决,这里记录一下 看这条SQL DELETE consum_record FROM ...
- 面试题: mysql数据库 已看1 索引和事务 没用
mysql数据库面试总结 2017年09月04日 00:11:40 阅读数:151 结合网上大神还有自己面试经历,收集的总结Mysql面试题,方便自己准备面试: mysql一个永远都复习不完,尽量总结 ...
- 面试题: mysql数据库 已看1 简单的sql练习
数据库总结--MySQL常见面试题 2015年03月24日 17:56:06 阅读数:7787 1.根据部门号从高到低,工资从低到高列出员工的信息 select * from employee ord ...
- 面试题: mysql 数据库已看 sql安全性 索引 引擎 sql优化
总结的一些MySQL数据库面试题 2016年06月16日 11:41:18 阅读数:4950 一.sql语句应该考虑哪些安全性? (1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译的sql语 ...
- 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题
2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...
- mysql数据库去重语句和不同表之间列的复制语句
1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...
- 某硕笔试题mysql数据库部分(较为全面)
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- MySQL数据库安装,配置My.ini文件
最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySql所以在配置的时候出现了一些问题,该篇 ...
- linux操作mysql数据库常用简单步骤
连接mysql数据库: 主要看mysql安装在哪一个目录下: mysql -h主机地址 -u用户名 -p用户密码 或者mysql -h ip地址 -u zaiai -p zaiai 或者/v ...
随机推荐
- LintCode:链表操作(合并与反转)
描述: (1)翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null ********************** ...
- 每天一个Linux命令(26)chown命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组. (1)用法: 用法: chown [选项 ...
- Java多线程系列 JUC锁08 LockSupport
转载 http://www.cnblogs.com/skywang12345/p/3505784.html https://www.cnblogs.com/leesf456/p/5347293.htm ...
- Fidder工具抓包及篡改数据
下载fiddler的最新版本: 运行fiddler之后测试要调试的页面是否可以捕获,刷新页面后左边列表会实时显示目前http请求的条目.如图红色部分 测试成功,开始断点捕获数据 点击菜单栏按钮[Rul ...
- oarcle12c打开本地数据库
--显示当前数据库的链接db,是cdb还是pdb. show con_name;--在oracle12c中打开本地数据库,否则本地数据库无法链接alter pluggable database pdb ...
- Codeforces 571B Minimization:dp + 贪心【前后相消】
题目链接:http://codeforces.com/problemset/problem/571/B 题意: 给你一个长度为n的数列a[i]. 现在你可以随意改变数字的位置,问你 ∑| a[i] - ...
- Javascript 模块化编程 --RequireJs
什么是模块化 模块就是实现特定功能的一组方法,常见的几种js写法 原始写法 function A() { } function B() { } 上面函数A()和B()组成一个模块,使用的时候直接调用就 ...
- C#返回Json,js解析Json,并添加到select标签中
后台: List<Student> list=GetAll();//id name string json = new JavaScriptSerializer().Serialize(l ...
- 分享知识-快乐自己:反射机制Demo解析
Java-Reflect专题 基本反射简介: 1):JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象能够调用它的任意方法和属性;这种动态获取信息以及动 ...
- Selenium-几种操作
元素定位之后就要对它进行操作了,常见的集中操作如下: click() 点击元素 eg.输入内容后,点击操作 send_keys("内容") 模拟按键输入 eg:百度输入框,输入内容 ...