SQL 删除重复项

yizhihongxing

当我们在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日

相关文章

  • 详解MySQL连接挂死的原因

    详解MySQL连接挂死的原因 MySQL连接挂死是MySQL常见的问题之一。当发生连接挂死时,数据库的性能和可用性都会受到影响,需要及时排除故障。 什么是连接挂死? 当MySQL客户端无法与服务器正常建立通信连接时,可能会发生连接挂死。此时,客户端与服务器之间的连接无法进行读取和写入操作,这可能会导致数据库的锁定和挂起等问题。 连接挂死的主要原因是MySQL…

    database 2023年5月21日
    00
  • php性能优化分析工具XDebug 大型网站调试工具

    下面是详细的攻略。 简介 XDebug是一款专业的PHP扩展,主要用于PHP代码的性能分析和调试。它具有以下特点: 支持代码覆盖率分析 支持性能分析 支持调试功能 支持远程调试 XDebug是一个非常强大的工具,在大型网站的调试和性能优化过程中,是不可缺少的。下面将介绍XDebug的基本用法和相关示例。 安装XDebug 在正式使用XDebug之前,需要先安…

    database 2023年5月22日
    00
  • MySQL客户端和服务器架构

    客户端-服务器(Client/Server)结构简称 C/S 结构,是一种网络架构,通常在该网络架构下的软件分为客户端和服务器。 MySQL是一个开源的关系型数据库管理系统,被广泛应用于Web应用开发和数据存储。MySQL的客户端和服务器架构是基于客户端/服务器模型构建的。在这种架构中,客户端通过网络向服务器发送请求,服务器处理请求并将结果返回给客户端。 M…

    MySQL 2023年3月8日
    00
  • 在Ubuntu系统中安装MariaDB数据库的教程

    下面是在Ubuntu系统中安装MariaDB数据库的教程: 准备工作 在终端中输入以下命令,更新Ubuntu软件包列表: sudo apt update 安装MariaDB所需的软件包: sudo apt install software-properties-common 安装MariaDB 使用以下命令添加MariaDB官方仓库: sudo apt-ke…

    database 2023年5月22日
    00
  • CentOS7.6 linux下yum安装redis以及使用

    1、检查是否有redis yum 源 1 yum install redis 2、下载fedora的epel仓库 1 yum install epel-release 3、安装redis数据库 1 yum install redis 4、安装完毕后,使用下面的命令启动redis服务 1 2 3 4 5 6 7 8 # 启动redis service redi…

    Redis 2023年4月12日
    00
  • SQL 创建有意义的列名

    下面是SQL创建有意义的列名的完整攻略: 一、为什么要创建有意义的列名? 在SQL命令中,列名是用于标识表中字段的信息,方便我们使用和查看数据。一个好的列名可以更好地表达字段的意思,增加代码的可读性,方便自己和其他人的理解和维护。 二、如何创建有意义的列名? 1. 遵循命名规范 命名规范是指一些行业内或编程规范中对于变量、函数、类、表名等定义的统一规则,这些…

    database 2023年3月27日
    00
  • 在ASP.NET 2.0中操作数据之六十四:GridView批量添加数据

    在ASP.NET 2.0中,可以使用GridView控件方便地展示和编辑数据,本文将讲解如何通过GridView批量添加数据,并包含两个示例说明。 1. 准备工作 在使用GridView批量添加数据之前,需做如下准备工作: 确定数据库连接字符串 确定表结构 为GridView绑定数据源 2. 批量添加数据 GridView控件具有内置的编辑、插入和删除功能,…

    database 2023年5月22日
    00
  • MySQL update set 和 and的区别

    当使用MySQL语言更新表中的记录时,可以使用UPDATE … SET语句来修改一个或多个列的数值。在UPDATE查询中,使用SET子句来设置要更新的列及其对应的值。同时也可以使用AND来添加多个where条件进行筛选。 下面我们详细讲解MySQL update set 和 and的区别的攻略: MySQL update set的使用 语法如下: UPD…

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