sql - 如何删除 SQL Server 中完全相同的重复行
问题描述
我出于测试目的从文件中将一些数据加载到 SQL Server 表中,但该表.CSV
中没有任何主键、唯一键或自动生成的 ID。
Helow 是一个例子:
select *
from people
where name in (select name
from people
group by name
having count(name) > 1)
当我运行此查询时,我得到以下结果:
目标是保留一行并删除其他重复的行。
除了将内容保存在其他地方,删除所有重复行并插入新行之外,还有其他方法吗?
感谢您的帮助!
解决方案
您可以为此使用可更新的 CTE。
如果要删除三列上完全重复的行(如示例数据中所示并在问题中解释):
with cte as (
select row_number() over(partition by name, age, gender order by (select null)) rn
from people
)
delete from cte where rn > 1
如果您只想删除重复项name
(如现有查询中所示):
with cte as (
select row_number() over(partition by name order by (select null)) rn
from people
)
delete from cte where rn > 1
推荐阅读
- api - gmsh 的 julia API 可以用于自适应网格细化吗?
- django - 码头上的 Django;静态文件消失
- java - 即使文件夹存在,file.listFiles() 也会返回 null
- shell - 在 awk 中打印最后一个非空列的值
- wordpress - 如何在 bash 脚本的 wp 注释列表中使用 date_query 参数
- mysql - SQLNonTransientConnectionException:使用 Hibernate 和 C3p0 关闭连接后不允许任何操作
- javascript - 使用包含不同可索引变量的元素改变 DOM
- c++ - Paho C++ Lib 集成:未解决的外部错误
- compiler-errors - SwiftUI:切换和按钮的奇怪错误
- python - 如何将数据移动到标题下方的新行