我正在尝试删除不包含特定状态的重复记录。
这是我的代码:
DELETE FROM [dbo].[test]
WHERE ID NOT IN ( SELECT MAX(ID)
FROM [dbo].[test]
GROUP BY [UserID] )
AND Status <> 'D'
我需要删除除包含状态&#39; D&#39;的记录以外的所有重复记录。它给我的错误是语法不正确。
最终的问题是我从两个表中插入数据。一个表Support,插入需要更新主表Data的信息。另一个表Identity提供主表的用户数据库。如果支持表中的状态显示“&#39; D&#39;对于Disable,我需要在主表中保留两个记录。
答案 0 :(得分:0)
你是说这个吗?
DELETE FROM [dbo].[test]
WHERE Status <> 'D' AND ID NOT IN (
SELECT MAX(ID)
FROM [dbo].[test]
GROUP BY [UserID])
答案 1 :(得分:0)
您的语法看起来不错。这是另一种方法:
with todelete as (
select t.*, max(id) over (partition by userid) as maxid
from dbo.test
)
delete from todelete
where id < maxid and status <> 'D';
您的问题提到了不同的表,但此查询仅提及一个表。我能理解未找到的#34;&#34;错误,但你的语法看起来还不错。