SELECT * FROM dept WHERE dname IN ( SELECT dname FROM dept GROUPBY dname HAVING COUNT(1) > 1 ) AND deptno NOTIN ( SELECT MIN(deptno) FROM dept GROUPBY dname HAVING COUNT(1) > 1 )
SELECT * FROM dept WHERE deptno NOTIN ( SELECT dt.minno FROM ( SELECT MIN(deptno) AS minno FROM dept GROUPBY dname ) dt )
c. 补充第三种方法:
SELECT * FROM table_name AS ta WHERE ta.唯一键 <> ( SELECTmax( tb.唯一键 ) FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 );
4. 删除表中多余重复试题并且只留1条:
a. 第一种方法:
DELETE FROM dept WHERE dname IN ( SELECT t.dname FROM ( SELECT dname FROM dept GROUPBY dname HAVING count(1) > 1 ) t ) AND deptno NOTIN ( SELECT dt.mindeptno FROM ( SELECT min(deptno) AS mindeptno FROM dept GROUPBY dname HAVING count(1) > 1 ) dt )
b. ☆第二种方法(与上面查询的第二种方法对应,只是将select改为delete):
DELETE FROM dept WHERE deptno NOTIN ( SELECT dt.minno FROM ( SELECT MIN(deptno) AS minno FROM dept GROUPBY dname ) dt )
c. 补充第三种方法(评论区推荐的一种方法):
DELETE FROM table_name AS ta WHERE ta.唯一键 <> ( SELECT t.maxid FROM ( SELECTmax( tb.唯一键 ) AS maxid FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 ) t );
二、多个字段的操作:
单个字段的如果会了,多个字段也非常简单。就是将group by 的字段增加为你想要的即可。
搜索Java知音公众号,回复“后端面试”,送你一份Java面试题宝典
.pdf
此处只写一个,其他方法请仿照一个字段的写即可。
DELETE FROM dept WHERE (dname, db_source) IN ( SELECT t.dname, t.db_source FROM ( SELECT dname, db_source FROM dept GROUPBY dname, db_source HAVING count(1) > 1 ) t ) AND deptno NOT