删除SQL表中具有相同ColumnName值的行?

时间:2013-12-04 14:50:40

标签: sql sql-server duplicates

我想删除SQL表中的所有重复项,这些副本在ColumnName中具有多个ID(或具有相同ColumnName值的多个行)。

这是用于一个ColumnName值的delect的SQL:

DELETE FROM MyDataTable WHERE ColumnName = 'UniqueComnName1'
AND ID <> (SELECT TOP 1 ID FROM MyDataTable  WHERE ColumnName = 'UniqueComnName1')

我想对表中的所有唯一ColumnName(或者只是表中的所有ColumnNames)执行此操作。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

你可以用两个小问题来做到这一点:

SELECT MIN(ID) AS ID INTO #tmpTable FROM MyDataTable GROUP BY ColumnName
DELETE FROM MyDataTable WHERE ID NOT IN (SELECT ID FROM #tmpTable)

答案 1 :(得分:1)

运行此命令并告诉我您的结果:

DELETE FROM MyDataTable
WHERE 
    ID != (SELECT MAX(ID) FROM MyDataTable A  WHERE A.ColumnName = MyDataTable.ColumnName)

此查询将保留ID等于具有相同ColumnName的记录的MAX(id)的记录。

答案 2 :(得分:1)

在一个声明中,这应该有效:

DELETE FROM MyDataTable t
WHERE ColumnName IN (SELECT ColumnName 
            FROM MyDataTable t1 
            WHERE (SELECT COUNT(*) FROM MyDataTable t2 WHERE t1.ColumnName=t2.ColumnName)>1)
        AND ID <> (SELECT TOP 1 ID 
                FROM MyDataTable t3
                WHERE t3.ColumnName = t.ColumnName)

答案 3 :(得分:0)

以下代码对删除重复记录很有用。该表必须具有标识列,该标识列将用于标识重复记录。示例中的表具有ID作为标识列,具有重复数据的列是DuplicateColumn1,DuplicateColumn2和DuplicateColumn3。

DELETE 来自MyDataTable 身份不在哪里 ( SELECT MAX(ID) 来自MyDataTable GROUP BY DuplicateColumn1,DuplicateColumn2,DuplicateColumn3)