繁体   English   中英

Microsoft T-SQL-是否可以删除重复的记录?

[英]Microsoft T-SQL - Is there a way to delete records that have duplicates?

我试图将复合主键添加到我称为“股票”的表中。 由于我想要的主键中有重复项,因此不允许我添加主键,因此有没有办法在单个查询中删除每个重复项中的1个,而不必手动进行?

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

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

您可以使用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;

我敢肯定有一个更优雅的解决方案,但是对于这样的一次性数据修复,我通常将重复记录的唯一副本Select到临时表中,从生产表中Delete它们,然后将临时表重新Insert到临时表中。生产表。 快速,肮脏,让我继续生活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM