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;
相关推荐
BigBigHang43 分钟前
【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
数据库·docker·容器
m0_720245011 小时前
QT(四)基本组件
数据库·qt·microsoft
Databend2 小时前
使用 Databend Cloud 归档 OceanBase 数据数据库
数据库
fei飛fei飞2 小时前
数据库事务中的陷阱:脏读、幻读与不可重复读
数据库
FINE!(正在努力!)2 小时前
关于sql面试积累
数据库·sql
看天走路吃雪糕2 小时前
墨者:SQL过滤字符后手工绕过漏洞测试(万能口令)
数据库·sql·sql注入·墨者学院·万能口令
阿里云大数据AI技术3 小时前
【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
数据库·数据分析·云计算
GBASE3 小时前
“G”术时刻:如何用Perl DBD-ODBC成功连接南大通用GBase 8a数据库(一)
数据库
Yu_Lijing3 小时前
MySQL进阶学习与初阶复习第二天
数据库·c++·学习·mysql
孫治AllenSun3 小时前
【JSqlParser】sql解析器使用案例
数据库·windows·sql