You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改TSQL查询以删除基于ORDER和ITEM拼接列的重复记录?

删除重复记录的SQL修改方案

场景说明

你有一张表,通过ORDER和ITEM列的组合可识别唯一记录。当前表中每个唯一组合都存在重复数据,你已用以下查询筛选出所有重复行(CN>1的记录):

原筛选重复行的查询

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

可直接修改为DELETE语句,以下是两种可行方案:

方案1:使用CTE(推荐,语法更清晰)

CTE(公共表表达式)可直接标记需要删除的行,执行删除操作:

WITH DuplicateRecords AS (
    SELECT 
        *,
        Row_Number() OVER(PARTITION BY [order], [item] ORDER BY [order]) as CN
    FROM [schema].[table]
)
DELETE FROM DuplicateRecords 
WHERE CN > 1;

方案2:基于原嵌套子查询的关联删除

若想沿用原有子查询结构,可通过表关联方式删除重复行:

DELETE t
FROM [schema].[table] t
INNER JOIN (
    SELECT 
        [order], 
        [item],
        Row_Number() OVER(PARTITION BY [order], [item] ORDER BY [order]) as CN
    FROM [schema].[table]
) Q ON t.[order] = Q.[order] AND t.[item] = Q.[item]
WHERE Q.CN > 1;

关键注意点

  • ORDER是SQL保留关键字,建议用方括号[order]包裹列名,避免语法错误
  • 若需保留重复组中的特定行(比如最早/最晚创建的记录),可调整ORDER BY子句,例如ORDER BY create_time DESC来保留最新的一行
  • 执行删除前务必验证:可先把DELETE替换成SELECT t.*,确认要删除的记录符合预期,防止误删数据

内容的提问来源于stack exchange,提问作者3PLanalyst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:18:11