Sql 删除重复记录而不使用中间表
我想删除数据库中表中的所有重复数据,而不使用行id或中间表。有没有办法做到这一点 这是我的初始表格:Sql 删除重复记录而不使用中间表,sql,teradata,Sql,Teradata,我想删除数据库中表中的所有重复数据,而不使用行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
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
或者类似的东西,如果在RDBMS中支持的话
您可以尝试
行号
,即
WITH CTE AS(
SELECT emp,
RN = ROW_NUMBER()OVER(PARTITION BY emp ORDER BY emp)
FROM employee
)
DELETE FROM CTE WHERE RN > 1
谢谢
Suresh你为什么要排除两种非常合理的方法来解决这个问题?你问了同样的问题,这个问题已经得到了回答,当然,最好的办法是通过添加唯一约束或简单地在Teradata中使用集合表来避免重复行:-)这会删除OP示例中的所有记录:)Teradata中不允许从cte中删除
;with cte as
(
select *,rn=row_number()over(order by empID) from table
)
delete from cte where rn>1
WITH CTE AS(
SELECT emp,
RN = ROW_NUMBER()OVER(PARTITION BY emp ORDER BY emp)
FROM employee
)
DELETE FROM CTE WHERE RN > 1