【问题标题】:Delete duplicate records without using intermediate table [duplicate]不使用中间表删除重复记录[重复]
【发布时间】:2014-04-04 13:17:23
【问题描述】:

我想在不使用行 ID 或中间表的情况下从数据库中的表中删除所有重复数据。有没有办法做到这一点?

这是我的初始表格:

emp emp_name    emp_addr
2   B   Pune1
3   C   Pune2
1   A   Pune
2   B   Pune1
3   C   Pune2
1   A   Pune
2   B   Pune1
3   C   Pune2
1   A   Pune
2   B   Pune1
1   A   Pune
1   A   Pune

以及删除重复数据后的样子:

emp emp_name    emp_addr
2   B   Pune1
3   C   Pune2
1   A   Pune

【问题讨论】:

  • 你为什么要排除两种非常合理的方法来解决这个问题?
  • 你问了同样的问题,已经回答了,你也可以提供你正在处理的查询
  • 当然最好的办法是通过添加 UNIQUE 约束或简单地在 Teradata 中使用 SET 表来避免重复行 :-)

标签: sql teradata


【解决方案1】:

你可以试试ROW_NUMBER,即

 WITH CTE AS(
   SELECT emp,
       RN = ROW_NUMBER()OVER(PARTITION BY emp ORDER BY emp)
   FROM employee
)
DELETE FROM CTE WHERE RN > 1

谢谢 苏雷什

【讨论】:

  • Teradata 中不允许从 cte 删除
【解决方案2】:
delete from table where                
EmpID in(select EmpID from table group by EmpId having count(*) >1)

或者如果您的RDBMS

支持类似的东西
;with cte as
(
select *,rn=row_number()over(order by empID) from table
)

delete from cte where rn>1

【讨论】:

  • 这将删除 OP 示例中的所有记录 :)
猜你喜欢
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 2012-09-15
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多