首页 > 解决方案 > Microsoft T-SQL - 有没有办法删除有重复的记录?

问题描述

我正在尝试将复合主键添加到我称为“Stock”的表中。由于我想要的主键中有重复项,它不允许我添加主键,所以有没有办法在单个查询中删除每个重复项中的 1 个,而不必手动执行?

我使用此查询找到了所有重复项(总共 67 行有重复项):

SELECT Count(*), STK, yr, mn, dy
FROM Stock
GROUP BY STK, yr, mn, dy
HAVING count(*) > 1
ORDER BY STK ASC;

标签: sqlsql-servertsql

解决方案


您可以使用 CTE 获取 ROW_NUMBER - 任何重复项的 ROW_NUMBER 都将大于 1(在数据库的测试副本中尝试此操作,而不是生产):

; WITH AllRecords
AS (
    SELECT STK, yr, mn, dy, RowNum = ROW_NUMBER()OVER(PARTITION BY STK, yr, mn, dy ORDER BY STK)
    FROM Stock
    )
DELETE s
FROM Stock s
    JOIN [AllRecords] a
        ON s.STK = a.STK
        AND s.yr = a.yr
        AND s.mn = a.mn
        AND s.dy = a.dy
WHERE a.[RowNum] > 1;

推荐阅读