SQL server 删除重复行

删除表中的重复记录需要谨慎操作,因为如果不正确地处理主键或唯一标识符,可能会导致数据丢失。通常,我们首先需要确定哪些列是用于判断记录是否重复的标准,然后根据这些标准来删除多余的记录。

以下是一个通用的SQL示例,用于删除基于特定列(假设为column1, column2, ..., columnN)的重复行,同时保留每组重复行中的一行(通常基于某种逻辑,如最早的记录或最大的ID)。

使用CTE和ROW_NUMBER()

假设我们有一个表my_table,我们想要基于column1column2来删除重复行,我们可以使用公用表表达式(CTE)和ROW_NUMBER()窗口函数来实现:

sql 复制代码
WITH CTE AS (  
    SELECT  
        *,  
        ROW_NUMBER() OVER(PARTITION BY column1, column2 ORDER BY id) AS rn  -- 假设id是表中用于确定顺序的列  
    FROM  
        my_table  
)  
DELETE FROM CTE  
WHERE rn > 1;
相关推荐
卿雪1 分钟前
认识Redis:Redis 是什么?好处?业务场景?和MySQL的区别?
服务器·开发语言·数据库·redis·mysql·缓存·golang
JIngJaneIL7 分钟前
基于Java失物招领系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·vue
爱尔兰极光19 分钟前
数据库基本操作(下)
数据库·sql
kka杰29 分钟前
MYSQL-索引
数据库·mysql
Aze..42 分钟前
PVE安装 Ubuntu 服务器版
运维·服务器·数据库
Boilermaker19921 小时前
[MySQL] 事务的隔离性与 MVCC
数据库·mysql
步步为营DotNet1 小时前
深度解析DbContext ChangeTracker:实体状态管理与性能优化
数据库·oracle·性能优化
南棱笑笑生1 小时前
20251205在ubuntu20.04.6下的打包/解压缩tar.bz2压缩包的方法
数据库·postgresql
java_logo1 小时前
PGADMIN4 Docker 容器化部署指南
运维·数据库·docker·postgresql·容器·数据库系统
a3722107741 小时前
HikariCP配置 高并发下连接泄漏避免
java·数据库·oracle