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

MSSQL中删除同一Object下重复Property数据的实现方法

MSSQL 删除同一ObjectID下重复Property数据的解决方案

问题分析

你之前的CTE查询未达预期,核心原因是分区条件错误:仅按Property分区无法区分不同ObjectID下的相同属性,必须同时按ObjectID和Property分区,才能精准定位同一对象内的重复属性行。

提取待删除数据的方法

使用CTE结合ROW_NUMBER(),按ObjectID+Property分组,对每组内的行按PropertyID升序编号,编号大于1的就是需要删除的重复行:

WITH CTE AS(
   SELECT 
       PropertyID,
       ObjectID,
       Property,
       RN = ROW_NUMBER() OVER(PARTITION BY ObjectID, Property ORDER BY PropertyID ASC)
   FROM t_objectproperties
)
SELECT * FROM CTE WHERE RN > 1

执行后会返回ID2、ID3这两行待删除数据。

直接删除重复数据的方法

方法1:基于CTE的删除

MSSQL支持直接对可更新CTE执行删除操作,只需在CTE中保留PropertyID和行号,即可定位并删除重复行:

WITH CTE AS(
   SELECT 
       PropertyID,
       RN = ROW_NUMBER() OVER(PARTITION BY ObjectID, Property ORDER BY PropertyID ASC)
   FROM t_objectproperties
)
DELETE FROM CTE WHERE RN > 1

方法2:关联子查询删除

通过子查询判断当前行是否存在同一ObjectID、同一Property且PropertyID更小的行,若存在则删除当前行:

DELETE t1
FROM t_objectproperties t1
WHERE EXISTS (
    SELECT 1
    FROM t_objectproperties t2
    WHERE t2.ObjectID = t1.ObjectID
      AND t2.Property = t1.Property
      AND t2.PropertyID < t1.PropertyID
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:42:46