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;
相关推荐
赵渝强老师3 小时前
【赵渝强老师】使用TiSpark在Spark中访问TiDB
数据库·mysql·tidb·国产数据库
Qinana5 小时前
第一次用向量数据库!手搓《天龙八部》RAG助手,让AI真正“懂”你
前端·数据库·后端
DolphinDB21 小时前
集成 Prometheus 与 DolphinDB 规则引擎,构建敏捷监控解决方案
数据库
IvorySQL1 天前
PostgreSQL 技术日报 (3月10日)|IIoT 性能瓶颈与内核优化新讨论
数据库·postgresql·开源
DBA小马哥1 天前
时序数据库是什么?能源行业国产化替换的入门必看
数据库·时序数据库
爱可生开源社区1 天前
某马来西亚游戏公司如何从 SQL Server 迁移至 OceanBase?
数据库
小瓦码J码1 天前
PostgreSQL表名超长踩坑记
数据库·postgresql
yhyyht1 天前
InfluxDB入门记录(三)flux-dsl
数据库·后端
IvorySQL2 天前
PostgreSQL 技术日报 (3月9日)|EXPLAIN ANALYZE 计时优化与复制语法讨论
数据库·postgresql·开源
stark张宇2 天前
MySQL 核心内幕:从索引原理、字段选型到日志机制与外键约束,一篇打通数据库任督二脉
数据库·mysql·架构