【问题标题】:Deleteing double-entries [duplicate]删除双重条目[重复]
【发布时间】:2017-01-25 13:19:03
【问题描述】:

我遇到的问题是在一张桌子上它有时会重复输入。我想删除双重条目。我只想在两个值与另一行相同时删除一行。这怎么可能?

我的数据库结构:

重复输入示例:

【问题讨论】:

  • 您的表的架构是什么?
  • 我得到双重输入的表是 Password_Department
  • 副本解释了如何做到这一点
  • 为什么不对 PasswordFK 和 DepartmentFK 创建唯一约束?

标签: sql-server tsql sql-server-2016


【解决方案1】:

一种方法是使用存在:

DELETE t0
FROM Password_Department t0
WHERE EXISTS
(
    SELECT 1
    FROM Password_Department t1
    WHERE t0.PasswordFK = t1.PasswordFK
    AND t0.DepartmentFK = t1.DepartmentFK
    AND t0.Id > t1.Id
)

如果您更喜欢行号方法 -

delete x 
from (
   select *, 
          rn = row_number() over (partition by DepartmentFK, PasswordFK order by Id)
   from Password_Department 
) x
where rn > 1

删除重复条目后,应在 PasswordFK 和 DepartmentFK 上添加唯一约束:

ALTER TABLE Password_Department 
ADD Constraint UC_Password_Department UNIQUE (PasswordFK , DepartmentFK)

【讨论】:

  • 我试过了,但影响了 0 行
  • @ZoharPeled AND t0.DepartmentFK = t1.DepartmentFK 确定吗?
  • 是的,有几个错别字,已修复。
猜你喜欢
  • 2021-01-22
  • 2014-08-01
  • 2013-03-09
  • 2018-10-16
  • 2010-12-17
  • 2014-12-28
  • 2014-08-17
  • 2012-04-10
  • 2021-12-16
相关资源
最近更新 更多