MySQL处理冗余信息(仅有主键不一致)

记录一个比较有趣的题目,以下建表语句:
CREATE TABLEtest(idint(11) NOT NULL,peopleIdint(11) DEFAULT NULL,namevarchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
表中数据大致如此,满足字段类型属性即可
id peopleid name
1 101 苹果
2 101 苹果
3 202 香蕉
4 303 鸭梨
5 303 鸭梨
6 303 鸭梨
要求处理上面的表(删除操作实现),得到表中每类水果只有一条记录,同一个人对应的记录值主键id 要是最小的;以下是自己的一种实现思路,
DELETE FROM test WHERE id NOT in( SELECT * FROM( SELECT MIN(id) FROM test GROUP BY peopleId)as temp_tab);
自己的想法是先选择出peopleid最小的记录,且水果名字/peopleid不会重复(使用分组实现),此时查出来的结果不能直接作为条件使用(SELECT MIN(id) FROM test GROUP BY peopleId);此时查询能够得到符合条件的保留数据,但是因为其中id为主键,不能直接在条件中使用,所以要再次查询;最后在执行删除。
自增字段的处理一也是一样的;

你可能感兴趣的:(MySQL)