2011-12-13 3 views
1
제거하는

가능한 중복은 :
How Do You Delete Duplicate Records In SQLSQL 쿼리는 중복 레코드

나는 열이있는 테이블이 있습니다, 각 행에 대해

FirstName 
LastName 
AddressLine1 
AddressLine2 
City 
State 

AddressLine1은 다르다 AddressLine2 값입니다. 그러나 일부 레코드의 AddressLine1이 다른 레코드의 AddressLine2과 일치하는 일부 중복 행이 있습니다.

나는 위에서 언급 한 그러한 기록을 없애고 싶습니다.

+0

지금까지 아이디어가 있습니까? 또한 하나의 레코드의 AddressLine1이 다른 레코드의 AddressLine2와 일치하지만 FirstName이나 City 또는 State가 다른 경우 어떻게해야합니까? – marnir

+0

도 http://stackoverflow.com/questions/841447/delete-duplicate-sql-records – JNK

+0

기본 키가 있습니까? 그 진술을 작게 만들 것입니다 ... – Randy

답변

2

이 모든 중복 레코드 얻을 것이다 :

SELECT P.* 
FROM table P INNER JOIN 
    table S ON P.FirstName = S.FirstName 
      AND P.LastName = S.LastName 
WHERE P.AddressLine1 = S.AddressLine2 

테이블은이 같은 중복을 제거 할 삭제 쓸 수있는 ID가 있다면 : 자체에

DELETE FROM table 
WHERE Id IN (
    SELECT P.Id 
    FROM table P INNER JOIN 
     table S ON P.FirstName = S.FirstName 
       AND P.LastName = S.LastName 
    WHERE P.AddressLine1 = S.AddressLine2 
) 
+0

거의 동일한 대답을 가졌으므로 행이 참으로 중복되면 더 좋을 것입니다. 예를 들어 가족 구성원이 주소가 같은 형식으로 삭제되어야하는 경우 실패합니다. – Glenn

+0

기본 키가 없습니다. 방금이 모든 데이터를 Excel로 가져 와서 SQL Server 테이블에 복사했습니다. –

1

테이블에 참여를

DELETE a 
FROM Table a 
JOIN Table b 
    ON a.AddressLine1 = b.AddressLine2 
+1

해당 열은 테이블에 없지만 그 접근법은 다소 유효합니다. – Yuck

0

일부 ID 또는 이름을 사용하여 UNIQUE_IDENTIFIER을 스왑 아웃하거나 쉽게 식별 할 수있는 항목 y. 그런 다음 필요에 따라 삭제를 처리 할 수 ​​있습니다. 또는 아래 내용을 필요에 따라 UPDATE 또는 DELETE 문으로 수정하십시오.

SELECT 
    t1.UNIQUE_IDENTIFIER, 
    t2.UNIQUE_IDENTIFIER 
FROM 
    table t1, 
    table t2 
WHERE 
    t1.AddressLine1 = t2.AddressLine2