2011-02-10 5 views
1

어떻게 든 복제 된 테이블이 있습니다. 기본적으로 SourceId라는 테이블에있는 필드로 정의 된 중복 된 모든 레코드를 삭제하려고합니다. 각 소스 ID마다 하나의 레코드 만 있어야합니다.특정 필드를 기반으로 데이터베이스 테이블에서 중복을 삭제하는 방법

거기에 내가 모든 Sourceid 당 하나의 레코드를 가질 수 있도록 모든 중복을 삭제합니다 쓸 수있는 SQL 있습니까?

+0

당신이 참조하고 SQL의 특정 버전으로 교체 select * from … 만에 시작하는 것입니다? –

답변

3

중복 소스 ID를 묶을 수있는 열 ID가 있다고 가정하면이 ID를 사용할 수 있습니다. min(id)을 사용하면 sourceid 일괄 처리 당 min (id) 만 유지합니다.

delete from tbl 
where id NOT in 
(
select min(id) 
from tbl 
group by sourceid 
) 
+0

나는 이것이 정확하다고 생각하지 않는다. subquery가 다른 sourceid의 min (id)이면 id가 하위 쿼리에 나타날 수 있습니다. 난 당신이 min (id) 당신이 찾고있는 상관 하위 쿼리가 필요하다고 생각합니다. –

+0

@ 여기에 ID가 테이블에서 고유하다는 가정이 있습니다. – RichardTheKiwi

1
delete from table 
where pk in (
select i2.pk 
from table i1 
    inner join table i2 
    on i1.SourceId = i2.SourceId 
) 

좋은 방법은 나중에 delete from …

관련 문제