使用 TSQL 表中的连接列删除重复记录

问题描述 投票:0回答:1

我有一个表,其中可以使用 ORDER 和 ITEM 的串联来识别唯一记录,如下所示:

订购 项目
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
... ...

该表目前有每个唯一组合的副本,如下所示:

订购 项目
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
1234 001
1234 002
1235 001
1235 002
1235 003
1236 001
1237 001
... ...

我正在使用以下子查询来选择所有重复的行:

SELECT * FROM (
    SELECT order + item AS ID,
    Row_Number() OVER(PARTITION BY order, item ORDER BY order) as CN
    FROM [schema].[table]
    ) 
AS Q WHERE Q.CN > 1

结果:

ID CN
1234001 2
1234001 3
1234001 4
1234002 2
1234002 3
1234002 4
1235001 2
1235001 3
1235001 4
... ...

如果这是一个非常简单的问题,请原谅我,但是是否有一个简单的修改可以将上面的子查询变成删除语句并删除它当前选择的每条记录(即 CN > 1)?

sql tsql sql-delete
1个回答
1
投票

您可以使用以下删除重复记录

DELETE FROM [schema].[table]
WHERE order + item IN (
    SELECT order + item
    FROM [schema].[table]
    GROUP BY order, item
    HAVING COUNT(*) > 1
)
© www.soinside.com 2019 - 2024. All rights reserved.