mysql常用功能之删除一张表中重复数据&ab表中a存在b不存在的 数据
- 工作小总结
- 时间:2018-08-03 11:23
- 3217人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
在开发中,我们有可能会遇到这种情况:
1:删除一张表中重复数据
2:AB两张表通过主键关联,删除A表中存在而B表中不存在的数据。如下图:
这样的怎么解决?
今天遇到一个问题。相同的数据在同一张表里出现了多次。我的需求是删除多余的数据,但要保留其中一条。
定义 表明 table_a ,判断唯一的两个字段 c_1,c_2,无关字段data
表中原始数据如下
首先我们要查看数据库中那些数据重复了,执行如下SQL
SELECT * FROM (SELECT COUNT(*) as num,c_1,c_2 FROM table_a GROUP BY c_1,c_2)e WHERE e.num>1;
结果如下 :
其中num字段为 数据出现的次数,可以发现我们已经找出了出现重复的数据,那么我们该怎么去除其中多余的数据呢。
我的思路是:再查询一个id 字段 ,我们group by 的时候 id 字段只能查询到重复数据中的一条。然后我们把这些id的数据删除,就达到了去重的效果。SQL 如下:
DELETE FROM table_a WHERE id IN (SELECT e.id FROM (SELECT id,COUNT(*) as num,c_1,c_2 FROM table_a GROUP BY c_1,c_2)e WHERE e.num>1);
突然想到一个更好的方法,SQL如下:
DELETE FROM table_a WHERE id IN (SELECT id FROM (SELECT id FROM table_a GROUP BY c_1,c_2 HAVING count(*) > 1)e);
执行:
可以看到有两行被删除了。这时再看看数据表,数据已经变成了:
成功将重复的数据删除。
如果重复数据是三条或者更多怎么办呢?很简单,再多执行几次这个SQL 就好了。
最后,别忘了给字段加个唯一索引,避免数据再出问题
问题2:
有表A 和表B.
A是索引表,B是详细表(数据结构如下)
A表
id title
1 标题
2 标题
B表
id listid info
1 1 内容1
2 1 内容2
3 1 内容3
4 2 内容1
5 2 内容2
6 2 内容3
7 3 内容1
8 3 内容2
9 3 内容3
现在A表已删除了某条记录
如何能将B表也删除A表没有的记录.
DELETE FROM B WHERE id IN (SELECT B.id FROM B LEFT JOIN A ON B.id=A.id WHERE A.id IS NULL);
上一篇: 百度网盘-Java相关资料(一)
下一篇: LNMP一键安装包