2011-12-13 11 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 

あなたのテーブルは、あなたがこのような重複を削除するには、DELETEを書くことができ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

スワップアウトUNIQUE_IDENTIFIER IDまたは名前を使用するか、簡単に識別できるもの将来はy。その後、必要に応じて削除を手渡すことができます。または、以下の内容を必要に応じてUPDATEまたはDELETEに変更します。

SELECT 
    t1.UNIQUE_IDENTIFIER, 
    t2.UNIQUE_IDENTIFIER 
FROM 
    table t1, 
    table t2 
WHERE 
    t1.AddressLine1 = t2.AddressLine2 
関連する問題