SQL 语句
SELECT ROWID,EMPNO,JOB FROM EMP WHERE ROWID!=(SELECT MAX(ROWID) FROM EMP D WHERE EMP.JOB=D.JOB)ORDER BY JOB;
分析:
现在EMP表有三条记录,分别为a(rowid=1),b(rowid=2),b(rowid=3)。(b存在重复) 那么where语句中,
对于记录a来说,只有一条记录,其rowid为1,而关联的D的max(rowid)也为1,由于1=1,所以条件不成立,记录a不会被检出;
对于记录b来说,由于存在2条记录,rowid分别为2和3,而关联的D的max(rowid)也为3(2小于3),所以rowid为2的记录满足条件(2<>3),rowid为2的b记录会被检出,rowid为3的记录不会被检出。
故对于以上,查询结果就是b(rowid=2)。
同等语句
1. SQL>delete from stu a where rowid not in (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex = b.sex);
2. SQL>delete from stu a where rowid < (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex = b.sex);
3.跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。
SQL>delete from stu where rowid not in (select max(rowid) from stu t group by t.no, t.name, t.sex );