2009-03-10 32 views

答えて

7

here。すでに各行を一意に識別する「ID」フィールドを持っていない場合は、これを動作させるための1つを作成する必要があります(作業が完了した後、あなたはいつもちょうど列を削除することができます):

DELETE 
FROM MyTable 
WHERE ID NOT IN 
(
SELECT MAX(ID) 
FROM MyTable 
GROUP BY DuplicateColumn1, DuplicateColumn2, DuplicateColumn2) 

また、このサイトで「重複行SQL Serverの削除」の検索を実行すると、この質問がすでに何度もここで回答されていることがわかります。

+0

そのようなリンクの1つSO:http://stackoverflow.com/questions/18932/sql-how-can-i-remove-duplicate-rows – alextansc

+0

正解であること、参照整合性の問題についてコメントして教えること一人一人の新しいもの。 –

0

使用:
セットの行カウント1

、これは関係なく、一致する複数の行がある場合は、1行を削除しますあなたの削除SQL

を実行します。

次に、クエリウィンドウを閉じるか、 RowCount 0を設定してリセットします。

2
DECLARE @Duplicates TABLE (AValue VARCHAR(32)) 

INSERT INTO @Duplicates VALUES ('No Duplicate') 
INSERT INTO @Duplicates VALUES ('Duplicate') 
INSERT INTO @Duplicates VALUES ('Duplicate') 


SELECT ID = IDENTITY(INT, 1, 1), * 
INTO #Duplicates 
FROM @Duplicates 

DELETE FROM #Duplicates 
FROM #Duplicates d 
    INNER JOIN (
     SELECT ID = MIN(ID) 
     FROM #Duplicates 
     GROUP BY AValue 
     HAVING COUNT(*) > 1 
    ) id ON id.ID = d.ID 

DELETE FROM @Duplicates 

INSERT INTO @Duplicates 
SELECT AValue FROM #Duplicates 

DROP TABLE #Duplicates 

SELECT * FROM @Duplicates 
0
  • DISTINCT SELECT TEMPTABLE INSERT INTO
  • 同じスキーマを持つ一時テーブルを作成します* oldtable
  • FROM
  • TEMPTABLE DROP * FROM oldtable SELECT INTO
  • oldtable INSERT FROM TEMPTABLE をDELETE

そして、忘れないでください:

  • これは答えの一つに言及した記事のリンクから取得されますが、ただ、将来的にいつか誰かを救うために、これは再び
1
;WITH tempTable AS 
    ( 
      SELECT ROW_NUMBER() OVER (PARTITION BY Column1 ORDER BY Column2) AS rownumber,* 
      FROM @Table 
    ) 
    DELETE FROM tempTable WHERE rownumber > 1 

が起こるのを許可しないように、あなたのテーブルをリファクタリング..

関連する問題