对于重复的数据,有两种情况:
1️⃣两行数据完全相同
2️⃣某字段相同
3️⃣id不同,其他字段相同
第1️⃣种情况的解决方案:
思路:
1.查出表中所有行,不显示重复行。
2.创建一张临时表,存储查到的新表数据。
3.删除原表数据
4.把临时表的数据插入到原表中。
5.删除临时表
sql:
CREATE TABLE 临时表 AS (SELECT DISTINCT * FROM 原表);
DELETE FROM 原表;
INSERT INTO 原表 (SELECT * FROM 临时表);
DROP TABLE 临时表;
第2️⃣种情况的解决方案:
思路:
1.查出表中有重复的行。
2.创建一张临时表,唯一地存储有重复的数据。
3.删除原表中所有重复的数据
4.把临时表的唯一重复数据插入到原表中。
5.删除临时表
sql:
CREATE TABLE 临时表 AS (SELECT * FROM 原表
GROUP BY 字段1
HAVING COUNT(字段1)>1);
DELETE FROM 原表 WHERE 字段1 IN
(
SELECT * FROM (SELECT 字段1 FROM 原表
GROUP BY 字段1
HAVING COUNT(字段1) > 1) 别名
)
INSERT INTO 原表 (SELECT * FROM 临时表);
DROP TABLE 临时表;
第3️⃣种情况的解决方案:
思路:
1.查出所有记录的最大id(这样就可以过滤掉其他id不同的相同记录),根据任意一个字段分类。(这样查出来的记录就是无重复的整表记录)
2.删除不在记录中的数据(重复的数据)
sql:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MAX(id) FROM 原表 GROUP BY 字段1) 别名
)
或:
DELETE FROM 原表 WHERE id NOT IN (
SELECT * FROM (
SELECT MIN(id) FROM 原表 GROUP BY 字段1) 别名
)