I have sql table but, some value added more than once, I need to delete one of them. Can you give me a simple query?
5 Answers
From here. If you don't already have an "ID" field that uniquely identifies each row, you'll need to create one for this to work (you can always just drop the column after you are done):
DELETE
FROM MyTable
WHERE ID NOT IN
(
SELECT MAX(ID)
FROM MyTable
GROUP BY DuplicateColumn1, DuplicateColumn2, DuplicateColumn2)
Also, do a search on this site for "delete duplicate rows sql server" and you'll see that this question has already been answered many times here.
2 Comments
alextansc
One such link in SO: stackoverflow.com/questions/18932/…
Lieven Keersmaekers
+1 for being a correct answer, commenting on the referential integrity problem and teaching me something new all in one go.
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