删除特定的重复记录

时间:2016-06-07 15:50:00

标签: sql sql-server database sql-server-2008 tsql

我正在尝试删除不包含特定状态的重复记录。

这是我的代码:

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,我需要在主表中保留两个记录。

2 个答案:

答案 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;错误,但你的语法看起来还不错。