我想删除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)执行此操作。我怎么能这样做?
答案 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)