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日

相关文章

  • Go安装和环境配置图文教程

    Go安装和环境配置图文教程 本文将详细讲解在Windows、macOS和Ubuntu操作系统上安装Go语言,并配置环境变量的过程。 安装Go Windows上安装Go 访问官网下载页面,选择与你的Windows系统匹配的安装包,如go1.17.1.windows-amd64.msi。 双击下载的安装包进行安装。 确认安装目录,点击下一步。 安装完成后,点击完…

    database 2023年5月22日
    00
  • CentOS环境下安装Redis3.0及phpredis扩展测试示例

    下面是CentOS环境下安装Redis3.0及phpredis扩展测试示例的完整攻略: 1. 安装Redis3.0 1.1 安装依赖 安装Redis之前,需要安装一些工具和依赖库。执行以下命令进行安装: yum install gcc-c++ -y yum install centos-release-scl -y yum install devtoolse…

    database 2023年5月22日
    00
  • Redis必须注意的慢查询问题

    今天解析服务在查询Redis的Set数据过程中抛出timeout exception,产生异常的方法是: db.SetMembers(key); 这个API返回结果是指定set内的所有kv对象; 解决这个问题的方法仅仅是使用另一个api: db.SetScan(key); 这个API也是返回set内所有的kv对象。 从功能上来说这2个API是一样的,但是其返…

    Redis 2023年4月12日
    00
  • 通过实例解析MySql CURRENT_TIMESTAMP函数

    我为你提供完整攻略,如下: 什么是CURRENT_TIMESTAMP函数 CURRENT_TIMESTAMP函数是MySQL的一个标准函数,可以获取当前时间,并以特定格式返回。 该函数可用于指定数据表字段的默认值,以确保在插入数据时将当前时间作为默认值插入。 CURRENT_TIMESTAMP函数语法 在MySQL中,CURRENT_TIMESTAMP函数的…

    database 2023年5月22日
    00
  • SQL 计算非Null值的个数

    计算 SQL 表中非 Null 值的个数可以使用 COUNT 函数。COUNT 函数是 SQL 中最常用的聚合函数之一,它可以用来统计表中某列的数据个数。在计算非 Null 值的个数时,需要使用 COUNT 函数结合 IS NOT NULL 运算符来实现。下面是两个实例代码: 统计某一列中非 Null 值的个数 SELECT COUNT(column_nam…

    database 2023年3月27日
    00
  • Windows7下通过命令行获得System权限问题解决方法

    下面是 “Windows7下通过命令行获得System权限问题解决方法”的完整攻略。 1. 问题描述 在Windows7操作系统下,有时候我们需要获取System权限来执行某些操作,但是普通用户并没有这个权限。那么如何通过命令行获取System权限呢? 2. 解决方法 要解决这个问题,我们可以使用Sysinternals Suite工具集中的PsExec.e…

    database 2023年5月21日
    00
  • ubuntu+php环境下的Memcached 安装方法

    安装Memcached的前提条件: 已经安装完整的LAMP或LEMP环境,分别是Linux系统下的Apache/Nginx + MySQL + PHP的组合; 已经从官方网站下载并安装了Memcached。 实施步骤: 使用sudo apt-get install memcached来安装Memcached,并安装php相关的扩展模块: sudo apt-g…

    database 2023年5月22日
    00
  • Java8新特性之再见Permgen_动力节点Java学院整理

    Java8新特性之再见Permgen – 完整攻略 介绍 Java8 是 Java 发展的一个重要里程碑。Java8 新增了很多实用的语法和功能,其中最重要的特性之一是永久带(Permgen)的消失,被元数据区取代。本篇文章将深入探讨这个新特性,并提供示例。 永久带与元数据区 在 Java 虚拟机的早期版本(1.7及以前)中,类的元数据信息存储在一个叫做“永…

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