当前位置:网站首页>MySql如何删除所有多余的重复数据
MySql如何删除所有多余的重复数据
2022-06-26 04:48:00 【唯空城】
MySql如何删除所有多余的重复数据
- 需要处理的数据,如:

- 出现重复的数据,如:

- 先用SELECT查询看看结果:
-- 方法一
SELECT * FROM t_user WHERE user_name IN (
SELECT user_name FROM t_user GROUP BY user_name HAVING COUNT(1)>1
)
AND id NOT IN (
SELECT MIN(id) FROM t_user GROUP BY user_name HAVING COUNT(1)>1
)
- 方法一查询出的所有多余的重复记录:

-- 方法二
SELECT * FROM t_user WHERE id NOT IN (
SELECT MIN(id) FROM t_user GROUP BY user_name
)
- 方法二查询出的所有多余的重复记录(与方法一的结果相同):

-- 方法三
SELECT * FROM t_user AS t1 WHERE t1.id <> (
SELECT MAX(t2.id) FROM t_user AS t2 WHERE t1.user_name=t2.user_name
)
- 方法三查询出的所有多余的重复记录:

这里方法三因为用了MAX()方法(也可改用MIN()),查询结果记录的id不太一样,但也可以被视为重复多余的数据,关键是你希望选择保留哪一条记录而已。
- 下面是对上面的SELECT语句稍作修改并加入了DELETE
-- 方法一(笨方法但容易理解)
DELETE FROM t_user WHERE user_name IN (
SELECT t1.user_name FROM (
-- 查询出所有重复的user_name
SELECT user_name FROM t_user GROUP BY user_name HAVING COUNT(1)>1
) t1
)
AND id NOT IN (
SELECT t2.min_id FROM (
-- 查询出所有重复的记录并各自只取其中一条(MIN(id)或MAX(id)都可以)
SELECT MIN(id) AS min_id FROM t_user GROUP BY user_name HAVING COUNT(1)>1
) t2
)
-- 方法二(推荐方法也容易理解)
DELETE FROM t_user WHERE id NOT IN (
SELECT t.min_id FROM (
-- 过滤出重复多余的数据,比如,如果所有记录中存在1条记录是user_name=zhangsan的,那么就取出它;
-- 如果所有记录中存在多条记录是user_name=lisi的,那么只取其中1条,其他的不查询出来
SELECT MIN(id) AS min_id FROM t_user GROUP BY user_name
) t
)
-- 方法三(推荐方法但不太容易理解)
DELETE FROM t_user WHERE id IN (
SELECT t.id FROM (
-- 1. 关于所有存在相同user_name的记录,只查询出(保留)重复记录中的1条,假设这样查询出来的集合为A集合。
-- 2. 在所有记录中,只要id不在A集合中的,都把它们查询出来
SELECT t1.id FROM t_user AS t1 WHERE t1.id <> (SELECT MAX(t2.id) FROM t_user AS t2 WHERE t1.user_name=t2.user_name)
) t
)
-- 或
DELETE FROM t_user t1
WHERE t1.id <> (
SELECT t2.max_id FROM (
SELECT MAX(t3.id) AS max_id FROM t_user t3 WHERE t1.user_name=t3.user_name
) t2
)
- 最后删除成功之后,显示数据已经没有重复的了
边栏推荐
- Differences between TCP and UDP
- Simple personal summary of tp6 multi application deployment -- Part I [original]
- Redis cache message queue
- Tp6 is easy to tread [original]
- 0622 horse palm fell 9%
- Simple use of redis in laravel
- 1.24 learning summary
- Problem follow up - PIP source change
- PowerShell runtime system IO exceptions
- Wechat applet exits the applet (navigator and api--wx.exitminiprogram)
猜你喜欢

A new paradigm for large model application: unified feature representation optimization (UFO)

Wechat applet exits the applet (navigator and api--wx.exitminiprogram)

DBeaver 安装及配置离线驱动

How to carry out word-of-mouth marketing for enterprises' products and services? Can word of mouth marketing be done on behalf of others?

A method of quickly transplanting library function code to register code by single chip microcomputer

Stm8 MCU ADC sampling function is triggered by timer

Use of better scroll

PHP small factory moves bricks for three years - interview series - my programming life
![Fastadmin always prompts sqlstate[23000]: integrity constraint violation: 1052 column 'ID' in order clause is am](/img/71/ed3b2ca9e6d4afd2dae3c601b3a75b.jpg)
Fastadmin always prompts sqlstate[23000]: integrity constraint violation: 1052 column 'ID' in order clause is am
![Laravel framework Alipay payment fails to receive asynchronous callback request [original]](/img/a7/139604ec3a977f2a4e96f392e56602.jpg)
Laravel framework Alipay payment fails to receive asynchronous callback request [original]
随机推荐
防撤回测试记录
Navicat connects the pit of shardingsphere sub table and sub library plug-ins
dijkstra
2022.2.17
SixTool-多功能多合一代挂助手源码
PHP installation SSH2 extension
mysql高级学习(跟着尚硅谷老师周阳学习)
The select option in laravel admin contains a large amount of data
numpy 数据输入输出
1.20 learning summary
Database design (3): database maintenance and optimization
2022.2.13
Differences between TCP and UDP
文件上传与安全狗
Multipass Chinese document - remote use of multipass
2022.2.10
2.22.2.14
Numpy general function
记录一次循环引用的问题
Anti withdrawal test record