sql - 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;
解决方案
您可以使用 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;
推荐阅读
- sql - SQL根据if语句添加列
- visual-studio-code - VS 代码 | 新窗口选择语言
- sql - 如何在 SQL where 子句中使用 case 函数?
- android - 潜在的 Firestore 离线获取数据错误
- kubernetes - Kubernetes“索引作业”不起作用
- django - 在 Django 中对 Field 类型进行模型范围的验证,即验证模型的所有 DecimalField 是否大于 0
- sql - SQL 查询计数具有相同条目的行
- go - 对为什么 hashsum、encode、print 与 Go 中的 write、hashum、encode、print 不同感到困惑?
- sql - 我可以将我的 SQL 代码(查询)作为 .sql 文档导出到我的计算机吗?
- javascript - 未捕获的 TypeError:work.filter 不是函数