SQL> select * from t;ID NAME SCORE---------- ---------- ----------3 smith 1004 smith 1005 jerry 806 tom 801 evan 1002 evan 1007 evan 100已选择7行。SQL> ed tmp.bufSQL> --获取所有的记录,但name与score两者不能重复SQL> --哪些字段相同,以哪些字段分组,然后获取其最小的idSQL> select min(id) id,name,score from t group by name,score;ID NAME SCORE---------- ---------- ----------6 tom 803 smith 1001 evan 1005 jerry 80SQL> ed tmp.bufSQL> --获取有重复记录的数据(有重复说明分组后count(*)>1),并且其id最小的记录SQL> --哪些字段相同,以哪些字段分组,然后获取其最小的idSQL> select min(id) id,name,score from t group by name,score having count(*) > 1;ID NAME SCORE---------- ---------- ----------3 smith 1001 evan 100SQL> ed tmp.bufSQL> --删除那些name与score重复的记录,只保留id最小的那一条SQL> DELETE FROM t2 WHERE t.ID NOT IN (SELECT MIN(id) AS id FROM t GROUP BY NAME, score);已删除3行。SQL> select * from t;ID NAME SCORE---------- ---------- ----------3 smith 1005 jerry 806 tom 801 evan 100此外还可以使用临时表的方式,即将我们需要的数据(没有重复的数据)先放到临时表中,然后删除正式表中的数据,最后将临时表中的数据插入到正式表中。
但是效率如何我还不知道哩,没有测试哩!