记录一个比较有趣的题目,以下建表语句:
CREATE TABLE
test(
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处理冗余信息(仅有主键不一致)
最新推荐文章于 2023-05-09 20:01:15 发布