日期:2014-05-17  浏览次数:20645 次

急急急 ,如何删除重复数据
有ceshi表 :


需要把表中TITLE,BOOK_SEARC这两个字段重复的记录删除,只保留一条数据 .

写了这个SQL语句 :
 delete  ceshi where (TITLE,BOOK_SEARC) in (select TITLE,BOOK_SEARC from ceshi group by TITLE,BOOK_SEARC having count(*)>1)
             and BOOK_BARCO not in(select min(BOOK_BARCO) from ceshi group by TITLE,BOOK_SEARC having count(*)>1)

会提示语法错误,请各位大侠指点一下.该如何实现这个功能?还有就是我表中的数据是百万条的记录,如何删除才能提高执行效率,缩短时间.谢谢各位了!

------解决方案--------------------
delete ceshi 
where BOOK_BARCO in 
(select BOOK_BARCO 
from (select *,rn=row_number() over(partition by TITLE,BOOK_SEARC order by BOOK_BARCO) from tb)t
where rn>1
)

------解决方案--------------------
 DELETE ceshi
 WHERE  EXISTS ( SELECT 1
                 FROM   ( SELECT    TITLE ,
                                    BOOK_SEARC
                          FROM      ceshi
                          GROUP BY  TITLE ,
                                    BOOK_SEARC
                          HAVING    COUNT(*) > 1
                        ) b
                 WHERE  ceshi.title = b.title
                        AND ceshi.book_searc = b.book_searc )

------解决方案--------------------
再改一下,是大于1的,都删除掉:

with t
as
(
select *,
       row_number() over(paritition by TITLE,BOOK_SEARC