有一張學生表,有姓名和性別(0:女,1:男),假如我們想刪除姓名和性別都相同的數據,這里介紹2中方法
首先看一下數據表
編號 | 姓名 | 性別 |
1 | 王璐 | 0 |
2 | 李萌 | 0 |
3 | 張帥 | 1 |
4 | 李萌 | 0 |
5 | 張帥 | 1 |
6 | 劉濤 | 1 |
NO.1
保留id較小的數據
DELETE t1 FROM student t1, student t2 WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id > t2.id
保留id較大的數據
DELETE t1 FROM student t1, student t2 WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id < t2.id
注意最后的t1.id > t2.id不要忘記,否則會刪除所有的數據,操作之前一定要先備份好數據
NO.2
INSERT INTO student_tmp(name, sex) SELECT DISTINCT name, sex FROM student
總結
兩種方法優缺點:
方法二所需時間更短,但是方法二當主鍵為uuid時,需要處理一下,可將把主鍵設置為int自增,然后執行下面的sql就可以了。
UPDATE student_tmp SET id = uuid()
參考:
https://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql