如何使用mysql去除表中重复的字段

简介:

此处的建表题目来自我们的也门哥Maged,非常感谢他出的这些测试题目,让我能够独立思考,反复试去找到cw2的正确做法。

数据库准备:

害怕被好homi被刺然后被 academic warning 所以浅浅打个码。

  1. 创建好这张表后我们我们可以显示创建一个自增主键(如若不创建mysql会隐式创建一个主键),方便我们后续操作。
  2. ALTER TABLE roles
        ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY FIRST;

问题解决步骤:

此时我们可以使用 

SELECT RoleID, COUNT(*) as count
FROM roles
GROUP BY RoleID
HAVING count > 1;

来查询重复的行数据。

此时我们会引出一个问题:我们查找到了重复数据,如何删除呢?

这时就可以使用上我们创建的主键id,由于该表roleid不满足唯一性,所以它不可能是主键id,所以我们可以使用一个聚合函数 min(),来确定最小id的重复数据行。

select
    min(id)
from roles
group by RoleID
having count(*) > 1;

查询出数据后我们只需要结合上面两次查询到的数据,使用delete语句,删除查询到的重复数据即可。但是我们不可以直接进行删除如:

delete from roles where RoleID in (
        select RoleID
        from roles
        group by RoleID
        having count(*) > 1
    )
and id not in(
        select min(id) as min_id
        from roles
        group by RoleID
        having count(*) > 1
    )

这样会报错:You can't specify target table 'user_info' for update in FROM clause

这是因为 MySQL 数据库不允许在 DELETE 语句的子查询中直接引用目标表,而通过在子查询外部再包裹一层查询,可以绕过这个限制。可以使用额外的子查询层级,将原始子查询的结果作为临时表,然后在外部的 DELETE 语句中引用这个临时表。

delete from roles where RoleID in (
    select X.* from (
        select RoleID
        from roles
        group by RoleID
        having count(*) > 1
        )as X
    )
and id not in(
    select min_id from (
        select min(id) as min_id
        from roles
        group by RoleID
        having count(*) > 1
        ) as y
    )

如此一来即可删除掉重复的数据。

然后使用

ALTER TABLE roles
    drop column id;

删除掉id字段,并且使用

ALTER TABLE roles
ADD CONSTRAINT pk_roles PRIMARY KEY (RoleID);

即可将RoleID设置为roles表主键id,并且其会自动创建索引。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/247594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ipad协议限制号版

特别声明:仅供学习交流 Applet显示/隐藏显示操作展开操作 POST /api/Applet/GetRandomAvatar 提取一个随机昵称和照片 POST /api/Applet/UploadAvatarImg 上传小程序身份照片 POST /api/Applet/AddAvatar 增加一个小程序身份 POST /api/Applet/OauthSdkApp 授权A…

ShellCode注入程序

程序功能是利用NtQueueApcThreadEx注入ShellCode到一个进程中,程序运行后会让你选择模式,按1为普通模式,所需的常规API接口都是使用Windows原本正常的API;在有游戏保护的进程中Windows原本正常的API无法使用,这时候需要…

绘图示例---QT手动调用绘图事件,按钮控制图片

效果: 点击 “移动” 图片向右移动20,点击 “西理win嘛” 图片每秒向右移动20 QQ录屏20231212164128 下面时代码详解: 注意使用UI和代码实现按钮的不同 UI: ui->pushButton->setGeometry(windowWidth-105, windowHeight-25, 100, 20);…

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生

最近,开发人工智能聊天机器人的公司 OpenAI 遭受了一次规模较大的分布式拒绝服务(DDoS)攻击,导致其旗下的 ChatGPT 服务在短短 12 小时内遭遇了 4 次断网,众多用户遭受了连接失败的问题。 这次攻击事件引起了广泛的关…

C++ stringOJ练习题

目录 把字符串转换成整数 反转字符串 字符串中的第一个唯一字符 字符串最后一个单词的长度 找出字符串中第一个只出现一次的字符 字符串相加 字符串最后一个单词长度 字符串相乘 反转字符串3 反转字符串2 验证回文串 把字符串转换成整数 通过遍历字符串并逐位转换…

漏洞复现-浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任意文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【开发工具】最新VMWare无法识别USB设备,驱动错误,未知错误【2023.12.15】

解决方案1:在这里改下连接方式 多试试 解决方案2 控制面板卸载程序,进行VMWare的修复 解决方案3 对于Windows7系统,切换解决方案1的usb类型为3.1,并下载这个intel的驱动包到虚拟机里 https://www.intel.com/content/www/us/en/do…

毅速:金属3D打印引领制造业进入新时代

随着科技的飞速发展,3D打印技术逐渐渗透到各个领域,为制造业带来了革命性的变革。其中,金属3D打印技术以其独特的优势,正逐渐成为制造业的新宠。 金属3D打印,也称为金属粉末烧结,是一种利用高能激光束将金属…

【JUC】三十、什么是AQS

文章目录 0、背景1、AQS介绍2、AQS核心概念3、AQS是JUC的基石4、锁和同步器的关系5、AQS的作用6、state和CLH队列6、AQS的内部类Node 0、背景 一段常见的代码: Lock lock new ReentrantLock(); lock.lock; try{//do Something } finally{lock.unlock(); }简单的一…

10分钟利用宝塔面板在阿里云服务器部署个人网页

目录 1、申请阿里云服务器 2、更换镜像(可选) 3、远程链接阿里云服务器安装宝塔面板 4、开放安全组 5、宝塔面板上传项目文件 1、申请阿里云服务器 购买链接->阿里云服务器购买 个人购买的就是这款,比较经济合算,而且2核…

HTTP 404错误:页面未找到,如何解决

在互联网上浏览时,偶尔会遇到“HTTP 404错误:页面未找到”的提示。这通常意味着用户尝试访问的网页不存在或无法找到。本文将探讨HTTP 404错误的原因以及如何解决这个问题。 一、HTTP 404错误的原因 HTTP 404错误可能是由多种原因引起的。以下是一些常…

线程安全集合类

文章目录 1. ConcurrentHashMap2. LinkedBlockingQueue 阻塞队列3. ConcurrentLinkedQueue4. CopyOnWriteArrayList JDK1.7 hashmap采用数组加链表头插的方式,在扩容时会出现循环死链问题,A->B->C扩容后C->B->A AB BA出现循环死链。 1. Conc…

《opencv实用探索·十九》光流法检测运动目标

前言 光流法(Optical Flow)是计算机视觉中的一种技术,用于估计图像中相邻帧之间的像素位移或运动。它是一种用于追踪图像中物体运动的技术,可以在视频中检测并测量物体的运动轨迹。 光流的直观理解: 光流是一个视频中两…

ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识

文章目录 1.动态链接库简介2.动态库搜索路径3.运行时链接及搜索顺序4.查看可运行模块的链接库5.总结 1.动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态…

upload-labs笔记

简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关,每一关都包含着不同上传方式。 文件上传漏洞是指: Web 服务器允许用户将文件上传至其…

[Unity]关于Unity接入Appsflyer并且打点支付

首先需要去官方下载Appsflyer的UnityPackage 链接在这afPackage 然后导入 导入完成 引入此段代码 using AppsFlyerSDK; using System.Collections; using System.Collections.Generic; using UnityEngine;public class AppflysManager : MonoBehaviour {public static App…

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别? 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器,判断…

VBA_MF系列技术资料1-242

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-04属于定…

C++之模板

目录 泛型编程 模板 函数模板 函数模板的实例化 隐式实例化 显示实例化 类模板 我们知道STL(标准模板库)是C学习的精华所在,在学习STL之前我们得先学习一个新的知识点-------模板。那么模板究竟是什么呢?围绕着这个问题&a…

java全栈体系结构-架构师之路(持续更新中)

Java 全栈体系结构 数据结构与算法实战(已更)微服务解决方案数据结构模型(openresty/tengine)实战高并发JVM虚拟机实战性能调优并发编程实战微服务框架源码解读集合框架源码解读分布式架构解决方案分布式消息中间件原理设计模式JavaWebJavaSE新零售电商项…