有没有办法从SQL Server中使用单列的表中删除重复?

发布于 2025-01-24 11:07:28 字数 180 浏览 2 评论 0原文

是否有可能从这样的表中删除重复行而无需丢弃表并用不同的行重新创建它?

DROP TABLE IF EXISTS #temp;

CREATE TABLE #temp (id INT);

INSERT INTO #temp
VALUES (1), (2), (2), (2), (3), (3);

Is there a possible way to delete duplicate rows from a table like this without dropping the table and re-creating it with distinct rows?

DROP TABLE IF EXISTS #temp;

CREATE TABLE #temp (id INT);

INSERT INTO #temp
VALUES (1), (2), (2), (2), (3), (3);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

还在原地等你 2025-01-31 11:07:28

使用您正在查看的指定列分组的CTE和ROW_NUMBER可以干净地删除重复值,因为ROW_NUMBER逐步计数,并通过汇总的分区的重复值进行了重复计数。当订购时发现新的分组时,它将ROW_NUMBER重置为1,从下一个不同分组值的记录开始。

 WITH CTE AS (
 SELECT *,
 ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN
 FROM #temp
 )

 DELETE FROM CTE WHERE RN<>1

Using a CTE and ROW_NUMBER grouped by the specified column you are looking at can cleanly remove duplicate values, as ROW_NUMBER counts incrementally with duplicate values of the PARTITION BY aggregation. When a new grouping is found when ordered, it resets the ROW_NUMBER to 1 starting at that next record of different grouped values.

 WITH CTE AS (
 SELECT *,
 ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col1) AS RN
 FROM #temp
 )

 DELETE FROM CTE WHERE RN<>1
半步萧音过轻尘 2025-01-31 11:07:28

这是您的答案,首先我们必须找到所有重新编码,

DELETE t 
FROM #temp t 
WHERE (SELECT count(1) 
    FROM #temp t1 
    WHERE t.id =t1.id )
    >1

希望您能找到最佳的解决方案。

Here is your answer, First we have to find all recodes

DELETE t 
FROM #temp t 
WHERE (SELECT count(1) 
    FROM #temp t1 
    WHERE t.id =t1.id )
    >1

Hope you will find the best solutions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文