Monday, 11 August 2014

Deleting Duplicates Without any Key Columns

Syntax:
delete from <tablename>.<%%Physloc%%> not in(select MIN(b.<%%physloc%%>) from <tablename b> group by b.COLUMNS)
Example

CREATE TABLE TestTable (
   Column1 varchar(1),
   Column2 int
);



INSERT INTO TestTable VALUES ('A', 1);
INSERT INTO TestTable VALUES ('A', 1); -- duplicate
INSERT INTO TestTable VALUES ('A', 2);
INSERT INTO TestTable VALUES ('B', 1);
INSERT INTO TestTable VALUES ('B', 2);
INSERT INTO TestTable VALUES ('B', 2); -- duplicate
INSERT INTO TestTable VALUES ('C', 2);

select * from TestTable
DELETE
FROM  TestTable
WHERE TestTable.%%physloc%%
      NOT IN (SELECT MIN(b.%%physloc%%)
              FROM   TestTable b
              GROUP BY b.column1, b.Column2)