以文本方式查看主题

-  搭建论坛  (http://bbs.diylsoft.com:8118/starforum/index.asp)
--  数据库交流  (http://bbs.diylsoft.com:8118/starforum/list.asp?boardid=6)
----  删除数据库中重复记录的SQL语句  (http://bbs.diylsoft.com:8118/starforum/dispbbs.asp?boardid=6&id=30115)

--  作者:dbs
--  发布时间:2010-4-14 8:38:16
--  删除数据库中重复记录的SQL语句

    在几万条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢?可以按照下面的例子进行操作:
    表School(或SchoolPro)字段SchoolId,SchoolName。
    1、查找表中多余的重复记录,重复记录是根据单个字段(SchoolId)来判断
    select * from School
    where SchoolId in (select  SchoolId  from  School  group  by  SchoolId  having  count(SchoolId) > 1)
    2、删除表中多余的重复记录,重复记录是根据单个字段(SchoolId)来判断,只留有rowid最小的记录
    delete from School
    where SchoolId  in (select  SchoolId  from School  group  by  SchoolId   having  count(SchoolId) > 1)
    and rowid not in (select min(rowid) from  School  group by SchoolId  having count(SchoolId )>1)
或者使用:delete from School
    where SchoolId  in (select  max(SchoolId)  from School  group  by  SchoolId   having  count(SchoolId) > 1)
    3、查找表中多余的重复记录(多个字段)
    select * from SchoolPro a
    where (a.SchoolId,a.SchoolName) in  (select SchoolId,SchoolName from SchoolPro group by SchoolId,SchoolName  having count(*) > 1)
    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
    delete from SchoolPro a
    where (a.SchoolId,a.SchoolName) in  (select SchoolId,SchoolName from SchoolPro group by SchoolId,SchoolName having count(*) > 1) and rowid not in (select min(rowid) from SchoolPro group by SchoolId,SchoolName having count(*)>1)
    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
    select * from SchoolPro a
    where (a.SchoolId,a.SchoolName) in  (select SchoolId,SchoolName from SchoolPro group by SchoolId,SchoolName having count(*) > 1) and rowid not in (select min(rowid) from SchoolPro group by SchoolId,SchoolName having count(*)>1)


--  作者:x123992009
--  发布时间:2010-4-16 19:58:10
--  
收藏了..已备.用到的时修来看.