MySQL的查询及删除重复记录

2023-11-06

查询及删除重复记录的方法
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(
)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(
)>1)

(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count() From A Group By Name Having Count() > 1

如果还查性别也相同大则如下:
Select Name,sex,Count() From A Group By Name,sex Having Count() > 1

(三)
方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count() from 表名 group by 主字段 having count() >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max

end

close cur_rows

set rowcount 0

方法二

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp

drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四)
查询重复

select * from tablename where id in (

select id from tablename

group by id

having count(id) > 1

)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL的查询及删除重复记录 的相关文章

  • 如何避免这两个 SQL 语句之间出现死锁?

    我有两个存储过程在单独的线程中运行 在 SQL Server 2005 上运行 一个过程将新行插入到一组表中 另一个过程从同一组表中删除旧数据 这些过程在表上遇到了死锁DLevel and Model 这是架构 source barrams
  • MYSQL:SQL查询获取自增字段的值

    我有一张桌子 主键是id及其自动递增 现在 当我插入新记录时 我需要获取更新记录的 id 我怎样才能做到这一点 如果我使用查询 select max id from table name 执行后我可以获得id 但我能确定它是刚刚插入的记录的
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • INNER JOIN 后从多个表获取最大日期

    我有以下两个表 table 1 ID HOTEL ID NAME 1 100 xyz 2 101 pqr 3 102 abc table 2 ID BOOKING ID DEPARTURE DATE AMOUNT 1 1 2013 04 1
  • 在 MySQL 中插入时检查并防止相似字符串

    简要信息 我有3张桌子 Set id name SetItem set id item id position TempSet id 我有一个函数可以生成新的随机组合Item桌子 基本上 总是在成功生成之后 我在中创建一个新行Set表 获取
  • 显示一个表中的所有记录以及另一表中的匹配记录

    您好 我有一张下表 其中记录了活动和积分 Activites A ID Site ActivityValue ActivityName 1 site1 7 ActivityName1 2 site1 6 ActivityName2 2 si
  • 如何使用 AJAX/jQuery 显示打印内容?

    所以我试图理解整个 AJAX jQuery 的事情 现在 当我单独运行这个 PHP 脚本时 我必须等待并观察轮子旋转 直到循环完成然后加载 while row mysql fetch array res postcode to storm
  • 如何将列中的天数添加到 DB2 中的当前日期?

    我正在编写此 SQL 来动态计算一定的天数 如下所示 但我不知道如何让它工作 因为我不断收到错误 select Current Date Dynamic numbr of days calculation here from TableNa
  • 获取一组记录之间的时间差

    我有一个具有以下结构的表 ID ActivityTime Status 19 2013 08 23 14 52 1 19 2013 08 23 14 50 1 19 2013 08 23 14 45 2 19 2013 08 23 14 3
  • 如何修改 Amazon RDS 实例的 my.ini 参数

    在启动 MySQL 5 5 RDS 实例时 Amazon 使用默认参数组来配置 my ini 参数 但控制台不允许我修改它们 我怎样才能实现这个目标 例如默认将存储引擎设置为MyISAM或设置字符集 此处记录了这一点 http aws am
  • 日志中每天的每周活跃用户数

    我想知道是否有人可以帮助我使用一些 SQL 来返回两天或更长时间内登录到数据库表的唯一用户数量 让我们使用 7 天作为参考 我的日志表在每一行中包含时间戳 ts 和 user id 表示该用户当时的活动 以下查询返回此日志中的每日活跃用户数
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • php无法在docker-compose中连接到mysql

    这是我的 docker compose version 2 services nginx image nginx 1 11 8 alpine ports 8081 80 volumes code usr share nginx html h
  • 如何在Oracle中从表中选择列,*?

    我正在创建很多脚本 有时为了检查表是否根据我的需要进行更新 我会即时编写几个 SELECT 语句 在 SQL SERVER 中你可以这样写 SELECT Column1 FROM MY TABLE 出于可见性原因 这很有用 但是这似乎在 O
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • MySQL 复制是双向的

    我们已经成功设置了 MySQL 文献中描述的主从复制 不过 我很好奇是否有人设置了双向复制 例如 如果安装了 Drupal 或 Wordpress 第一个 主 数据库服务器出现故障 第二个 从属 数据库服务器恢复正常 与此同时 用户不断进行
  • 每行中非空列的计数

    我有一个包含 4 列的表 在第 5 列中我想存储前 4 列中有多少个非空列的计数 例如 其中 X 是任意值 Column1 Column2 Column3 Column4 Count X X NULL X 3 NULL NULL X X 2

随机推荐

  • caffe windows学习:第一个测试程序

    caffe windows编译成功后 就可以开始进行测试了 如果还没有编译成功的 请参考 caffe windows 学习第一步 编译和安装 vs2012 win 64 一般第一个测试都是建议对手写字体minist进行识别 这个测试放在根目
  • 图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现

    老猿Python博文目录 https blog csdn net LaoYuanPython 仿射变换博文传送门 带星号的为付费专栏文章 图像仿射变换原理1 齐次坐标来龙去脉详解 图像仿射变换原理2 矩阵变换 线性变换和图像线性变换矩阵 图
  • 什么是模态分析

    本文内容来自微信公众号 模态空间 你能为我解释模态分析吗 好 需要花费一点时间 但是任何人都能明白 你不是第一个要求我用通俗易懂的语言解释模态分析的人 这样一来 任何人都能明白模态分析 简单地说 模态分析是一种处理过程 是根据结构的固有特性
  • vue3中的this.$set怎么写呢?

    vue3中的this set怎么写呢 在vue2中我们常常会遇到明明已经改变了数据视图却没有实时更新这样的问题 举例
  • 关于网站自定义字体css加密篇

    平常在浏览网页时会发现有很多网页的文字是无法直接复制的 例如这个 中国供应商网 最新采购 采购中心 中国供应商 其实这就是一种网站自定义的字体 font face font family src 其中font family就是你自定义的字体
  • 科普丨深度学习 vs 概率图模型 vs 逻辑学

    来源 人工智能爱好者俱乐部 概要 许多早期的人工智能工作都是关注逻辑 自动定理证明和操纵各种符号 John McCarthy于1959年写的那篇开创性论文取名为 常识编程 也是顺势而为 今天 我们一起来回顾过去50年人工智能 AI 领域形成
  • Linux网络代理服务器搭建及使用

    测试环境 代理服务器 centos 7 使用代理的客户端 win 10 搭建代理服务器 centos安装代理软件 squid yum install squid y yum install httpd tools y 创建账户密码文件 mk
  • osgEarth的Rex引擎原理分析(六十九)状态树和渲染树的关系

    目标 五十五 中的问题140 状态树和渲染树的建立是在CullVisitor中完成的 状态树你可以看成是一个二叉树 非叶子节点StateGraph和叶子节点ReaderLeaf组成 然后一个ReaderLeaf你可以看成有一个Drawabl
  • (转载) MySQL索引简述

    概述 用来加快查询的技术很多 其中最重要的是索引 通常索引能够快速提高查询速度 如果不适用索引 MYSQL必须从第一条记录开始读完整个表 直到找出相关的行 表越大 花费的时间越多 但也不全是这样 本文讨论索引是什么 如何使用索引来改善性能
  • PyTorch实现的MTCNN/LPRNet车牌识别

    文章目录 MTCNN MTCNN 基础知识 MTCNN车牌检测 MTCNN车牌检测网络结构 LPRNet LPRNet特性 STNet STNet网络结构 LPRNet的基础构建模块 特征提取骨干网络架构 LPRNet网络结构 CCPD数据
  • 【华为OD机试真题 Java】最大花费金额

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • ActivityOptions副屏启动

    ActivityOptions副屏启动 1 ActivityOptions 2 ActivityStarter转化为SafeActivityOptions 2 1 Request activityOptions 2 2 ActivityRe
  • 使用prompt在页面中弹出提示对话框

    根据用户输入星期一 星期日的不同 弹出不同信息提示对话框 要求使用函数实现
  • 【代码随想录】哈希表刷题

    哈希表 有效的字母异位词 赎金信 字母异位词分组 找到字符串中所有字母异位词 两个数组的交集 两个数组的交集II 快乐数 两数之和 四数相加 II 三数之和 四数之和 心得技巧 数据范围小 可以使用数组模拟哈希 想清楚什么作为哈希的 Key
  • VMware Workstation 15 安装教程

    哈喽 大家好 今天一起学习的是VMware Workstation 15的安装 vm虚拟机是小编非常喜欢的生产力软件 小编之前发布的测试教程钧在vm上进行的实验 VMware Workstation是一款功能强大的桌面虚拟计算机软件 它能够
  • python测试开发工具库汇总

    https github com china testing python api tesing blob master books md 有相关书籍下载 Web UI测试自动化 splinter web UI测试工具 基于selnium封
  • Step1-权限管理介绍

    一 相关操作界面 1 能实现角色级权限 RBAC 2 能实现功能级和数据级别权限 权限管理界面 角色管理界面 用户管理界面 角色和权限关系维护界面 用户和角色关系维护界面 主流开源权限管理框架有 Spring Security 和 Apac
  • Linux下安装配置Ftp服务器

    Linux环境中安装配置FTP服务 1 安装Vsftpd服务 1 查看Linux环境中是否已经存在安装的ftp 查看并显示安装的版本号 没有安装则不显示 rpm qa grep vsftpd 2 如果存在已经安装的Vsftpd服务 则先卸载
  • 素数判断(C语言)

    素数就是除了本身和1外 不能整除任何数 通过c语言来判断素数是很容易的 我们只需要做一个for循环就行了 让这个数对所有小于它的数求余数 如果余数都不为0 那就说明这是一个素数 逻辑整明白了 就上代码 如图 在这个程序里 我做了一个函数调用
  • MySQL的查询及删除重复记录

    查询及删除重复记录的方法 一 1 查找表中多余的重复记录 重复记录是根据单个字段 peopleId 来判断 select from people where peopleId in select peopleId from people g