Sql 删除特定的重复记录
我正在尝试删除不包含特定状态的重复记录 这是我的密码:Sql 删除特定的重复记录,sql,sql-server,database,sql-server-2008,tsql,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' 我需要删除除包含状态“D”的记录之外的所有重复记录。它给我的错误是语法不正确 最终的问题是我从两个表中插入数据。一个表S
DELETE FROM [dbo].[test]
WHERE ID NOT IN ( SELECT MAX(ID)
FROM [dbo].[test]
GROUP BY [UserID] )
AND Status <> 'D'
我需要删除除包含状态“D”的记录之外的所有重复记录。它给我的错误是语法不正确
最终的问题是我从两个表中插入数据。一个表Support插入需要更新主表Data的信息。另一个表Identity为主表提供用户数据库。如果支持表中的状态为“D”表示禁用,则我需要在主表中保留这两条记录 你是这个意思吗
DELETE FROM [dbo].[test]
WHERE Status <> 'D' AND ID NOT IN (
SELECT MAX(ID)
FROM [dbo].[test]
GROUP BY [UserID])
你是说这个吗
DELETE FROM [dbo].[test]
WHERE Status <> 'D' AND ID NOT IN (
SELECT MAX(ID)
FROM [dbo].[test]
GROUP BY [UserID])
你的语法看起来不错。以下是另一种方法:
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';
您的问题涉及不同的表,但此查询只涉及一个表。我可以理解“未找到列”错误,但您的语法看起来正常。您的语法看起来正常。以下是另一种方法:
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';
您的问题涉及不同的表,但此查询只涉及一个表。我可以理解一个列“未找到”错误,但您的语法看起来正常。为什么条件和状态“D”在括号外?不断出现语法错误。请尝试我的和@GordonLinoff解决方案。这样就成功了。谢谢你接受我的回答。我看你没有改变顺序来解决这个问题。该查询看起来有效。也许你有一个“时髦的”。它说错误在哪里。为什么条件和状态“D”在括号外?不断出现语法错误。试试我的和@GordonLinoff解决方案。这样就成功了。谢谢你接受我的回答。我看你没有改变顺序来解决这个问题。该查询看起来有效。也许你有一个“时髦的”。它说错误在哪里。出于好奇,除了顺序之外,你的查询和OP查询有什么区别?@bjones说实话,我只是把条件移到了上面。我现在没有任何东西要测试,所以我真的不确定它是否会工作,或者两个查询是否工作相同。这就是为什么我问有什么区别。我不知道你的问题对接受它作为答案有什么影响。就像狗仔队所说的,可能是“放错地方了”。@bjones是的,可能是我很幸运:出于好奇,除了订单之外,你的查询和OP查询有什么区别?@bjones说实话,我只是把条件移到了最上面。我现在没有任何东西要测试,所以我真的不确定它是否会工作,或者两个查询是否工作相同。这就是为什么我问有什么区别。我不知道你的问题对接受它作为答案有什么影响。就像狗仔队说的,也许这是一个放错地方了。@bjones是的,也许我很幸运: