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日

相关文章

  • nali 一款linux下显示IP地理位置的小工具

    下面就是“nali 一款linux下显示IP地理位置的小工具”的攻略: 1. 什么是 nali nali 是一款 Linux 下显示 IP 地理位置信息的小工具,它可以通过 IP 地址来查询该 IP 所在的地理位置、运营商、AS 号等信息。nali 能够方便地帮助我们快速了解网站、服务器等背后的实际位置和运营商等信息,为我们的网络诊断工作提供便利。 2. 如…

    database 2023年5月22日
    00
  • MongoDB创建集合步骤详解

    环境配置 在使用MongoDB之前,需要先完成相应的环境配置。首先需要安装MongoDB,安装过程可以参考官方文档。 安装完成后,需要启动MongoDB服务。在Windows系统中,可以通过进入MongoDB的安装路径,打开命令行工具,输入mongod命令即可启动服务。在Linux系统中,可以使用systemctl命令启动服务。 创建数据库 在MongoDB…

    MongoDB 2023年3月13日
    00
  • SQL注入技巧之显注与盲注中过滤逗号绕过详析

    SQL注入技巧之显注与盲注中过滤逗号绕过详析 SQL注入攻击是指攻击者通过在Web应用程序中插入恶意的SQL查询语句,以欺骗Web应用程序执行非预期的行为。SQL注入技巧中,逗号是经常被过滤的一个字符,因为逗号在SQL语句中通常用作分隔符。在本文中,我们将深入探讨SQL注入攻击中绕过逗号过滤的技巧。 显注中的逗号绕过 显注是指攻击者向Web应用程序中插入的恶…

    database 2023年5月22日
    00
  • MySQL安装与创建用户操作(新手入门指南)

    MySQL安装与创建用户操作(新手入门指南) MySQL是一种常用的关系型数据库管理系统,是开源软件,用户可以免费获取和使用。MySQL具有高度可定制性,易于安装和使用,支持多种语言和操作系统。在本篇文章中,我们将介绍如何在Windows系统下安装和配置MySQL,并创建和授权新用户。 步骤一:MySQL的安装 1.1. 下载MySQL安装程序 首先,在My…

    database 2023年5月22日
    00
  • Mysql慢查询操作梳理总结

    Mysql慢查询操作梳理总结 什么是慢查询? 慢查询是指MySQL查询操作执行时间过长的查询语句,会导致数据库服务器的性能问题。MySQL提供了一个日志功能来记录所有查询操作的执行时间(慢查询日志文件)。通过慢查询日志文件,我们能够定位到哪些查询语句需要进行性能优化。 开启慢查询日志 在MySQL中,在my.cnf配置文件中开启慢查询日志功能。编辑my.cn…

    database 2023年5月19日
    00
  • redis集群搭建以及在SpringBoot中的配置

    redis的安装:https://www.cnblogs.com/knightdreams6/p/11270400.html 集群搭建: 两台虚拟机模拟6个节点,一台机器3个节点,创建3 master, 3 salve 环境 redis采用 redis-5.0.5版本。 两台虚拟机都是CentOS7,一台ip(192.168.3.222),另一台(192.1…

    Redis 2023年4月11日
    00
  • mysql 按照时间段来获取数据的方法

    获取 MySQL 数据库中某个时间段之内的数据是开发中经常遇到的问题,在 MySQL 中,可以使用 WHERE 子句的 BETWEEN 运算符或者 > 和 < 运算符来实现。下面是具体步骤: 步骤一:准备数据 首先,我们需要准备一张包含时间信息的表,例如: CREATE TABLE `mytable` ( `id` int(11) NOT NUL…

    database 2023年5月22日
    00
  • Oracle MERGE INTO的用法示例介绍

    下面是一份关于 “Oracle MERGE INTO的用法示例介绍” 的完整攻略。 什么是MERGE INTO MERGE INTO 是一种 SQL 语句,它可以根据指定的条件在目标表中进行插入、更新或删除数据的操作。如果源数据和目标数据发生冲突,可以根据指定的条件进行解决。 MERGE INTO 语句的语法如下: MERGE INTO target_tab…

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