SQL 删除重复项

当我们在SQL表中有重复记录时,我们可能需要删除这些重复项。以下是一些实用的SQL删除重复项的方法:

方法1:使用DISTINCT

使用SELECT DISTINCT语句选择所有非重复记录,并将它们插入到新表中,然后将旧表重命名并将新表重命名为旧表名称。如下所示:

-- 将DISTINCT查询结果插入到新表中
SELECT DISTINCT *
INTO new_table
FROM original_table;

-- 重命名表
DROP original_table;
EXEC sp_rename 'new_table', 'original_table';

方法2:使用ROW_NUMBER()OVER函数

使用ROW_NUMBER()OVER函数确定每个行的排序序列,并删除序列号大于1的行。如下所示:

-- 删除重复项
WITH CTE AS (
    SELECT *,
    ROW_NUMBER() OVER (
        PARTITION BY column_name1, column_name2,...
        ORDER BY (SELECT 1)
    ) AS rn
    FROM table_name
)
DELETE FROM CTE
WHERE rn > 1;

请注意,PARTITION BY子句指定要删除重复记录的列,ORDER BY子句可以为空或为“(SELECT 1)”。

以下是两个使用方法2的示例:

示例1:

假设我们有以下表:

CustomerID FirstName LastName Age
1 John Smith 35
2 Jane Doe 24
3 John Smith 35
4 Paul Brown 42

我们可以使用以下SQL删除重复项:

WITH CTE AS (
    SELECT *,
    ROW_NUMBER() OVER (
        PARTITION BY FirstName, LastName, Age
        ORDER BY (SELECT 1)
    ) AS rn
    FROM Customers
)
DELETE FROM CTE
WHERE rn > 1;

结果将是:

CustomerID FirstName LastName Age
1 John Smith 35
2 Jane Doe 24
4 Paul Brown 42

示例2:

假设我们有以下表:

Id City Country
1 Beijing China
2 Shanghai China
3 Tokyo Japan
4 Beijing China

我们可以使用以下SQL删除重复项:

WITH CTE AS (
    SELECT *,
    ROW_NUMBER() OVER (
        PARTITION BY City, Country
        ORDER BY Id
    ) AS rn
    FROM Cities
)
DELETE FROM CTE
WHERE rn > 1;

结果将是:

Id City Country
1 Beijing China
3 Tokyo Japan
2 Shanghai China

希望以上内容能够解决你的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 删除重复项 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • 如何使用Python在MySQL中使用唯一键?

    在MySQL中,唯一键是一种用于确保表中每一行的唯一性的特殊列。在Python中,可以使用MySQL连接来执行唯一键查询。以下是在Python中唯一键的完整攻略,包唯一键基本语法、使用唯一键的示例及如何在Python中使用唯一键。 唯一键的基本语法 在MySQL中可以使用UNIQUE关键字来指定唯一键列。以下是创建唯一键列的本语法: CREATE TABLE…

    python 2023年5月12日
    00
  • php简单的分页程序第5/5页

    下面我将为您详细讲解“PHP简单的分页程序第5/5页”的完整攻略,包括分页程序的原理、实现步骤以及具体的代码示例。 分页程序原理 分页程序的原理很简单,就是将数据分为多个页面显示,让用户可以方便的查看和跳转。具体来说,分页程序需要以下几个步骤: 获取总记录数 在使用分页程序之前,需要先获取总的记录数,这样才能确定要分成多少页。通常可以使用SQL语句如下: S…

    database 2023年5月21日
    00
  • Oracle中执行动态SQL

    Oracle中执行动态SQL的攻略如下: 1. 拼接SQL语句字符串执行 在Oracle中,可以通过拼接SQL语句字符串的方式执行动态SQL,具体步骤如下: 步骤一:声明变量 首先需要定义一个包含动态SQL语句的字符型变量。 DECLARE v_sql VARCHAR2(200); BEGIN — 在此处定义动态SQL语句的变量,例如: v_sql := …

    database 2023年5月21日
    00
  • SQL 删除不想要的字符

    当我们在操作数据库时,可能会出现需要删除某些不需要的字符或者数据的情况。下面详细讲解SQL删除不想要的字符的完整攻略。具体方法如下: 1.使用SUBSTRING函数删除一个字符 SUBSTRING函数是SQL用于截取字符串的函数之一,我们可以使用它来删除我们不需要的字符。具体方法如下: UPDATE table_name SET column_name = …

    database 2023年3月27日
    00
  • MySQL中count(*)执行慢的解决方案

    MySQL中count(*)执行慢的解决方案有很多种,下面我将详细讲解其中的两种方法: 方法一:使用where代替count(*) 当表中数据量比较庞大时,使用count()查询会十分缓慢。可以通过使用where代替count()来提高查询速度。例如: SELECT COUNT(*) FROM `my_table` WHERE `field` = 1 这里m…

    database 2023年5月19日
    00
  • 用PHP连mysql和oracle数据库性能比较

    下面是详细讲解“用PHP连mysql和oracle数据库性能比较”的完整攻略。 准备工作 在进行数据库性能比较前,我们需要先搭建好PHP、MySQL和Oracle的环境。 安装PHP环境 我们首先需要在本地安装PHP环境。可以在PHP官网上下载并安装对应系统的PHP版本。 安装MySQL 我们可以在MySQL官网上下载并安装MySQL Community S…

    database 2023年5月22日
    00
  • Win2008中SqlServer2008 无法打开错误日志文件导致无法启动的解决方法

    以下是详细的攻略: 问题描述 在Win2008系统中使用SqlServer2008时,可能会遇到无法启动的问题。查看错误日志时发现无法打开日志文件,导致无法启动。此时,我们需要进行以下的解决方法。 解决方法 方法一:修改服务启动参数 打开服务管理器,找到SQL Server服务,选中右键,选择“属性”。 在“属性”对话框中,选择“服务”选项卡,找到“启动参数…

    database 2023年5月21日
    00
  • MySQL之DATETIME与TIMESTAMP的时间精度问题

    MySQL之DATETIME与TIMESTAMP的时间精度问题 简介 MySQL 中有两种用于存储日期时间的数据类型:DATETIME 和 TIMESTAMP。它们在精确度和存储方式上有所不同。 本文将详细讲解这两种数据类型的不同之处,并通过示例说明一些注意事项,帮助您更好地理解它们。 DATETIME DATETIME 数据类型存储日期和时间数据,精度为秒…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部