SQL查询重复记录

article/2025/8/21 11:31:26

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,seqhaving count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq havingcount(*)>1)

 

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

 

select * from vitae a
where (a.peopleId,a.seq) in   (select peopleId,seq from vitae group by peopleId,seqhaving count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq havingcount(*)>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

 

 

假设有重复的字段为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
)

 

原文地址:https://blog.csdn.net/chinmo/article/details/2184020


http://chatgpt.dhexx.cn/article/gWj1U0s1.shtml

相关文章

为什么int无法转换为Double????

规律:拆、装箱和升、降级两者可以在同一条语句中进行,但是一定要先拆箱或装箱再升级或者降级。。。 一条语句中,int无法转换为Double,因为这里涉及到先升级再装箱子,拆装箱一定要在升降级前面。。。。。 一条语句中&…

C++中int或double与string的相互转换

一、int转string 1.c11标准增加了全局函数std::to_string: string to_string (int val); string to_string (long val); string to_string (long long val); string to_string (unsigned val); string to_string (unsigned long val); string to_string (unsigned long …

java byte[]转int和double

一般无需java来处理byte字节的数据转成 int , C语言更适合干这事. 但是无奈遇到了这种需求. 网上百度了一小部分代码, 发现好多错误代码… 干脆自己手写了一遍… byte[]数据的格式协议文档如下: 先上使用代码 byte[] hex Base64.getDecoder().decode(data); int head Read…

详细讲解int、float与double的区别

最近为了看一下float的精确度仔细看了一下这三种数据在内存中的样子,看了一下别人的博客发现大家对精度都有这不同的定义,我自己也简单画了一下。 下面来主要讲解一下int、float与double三者的区别与详解 一、int(最简单的一种)…

c++ string转int, double,int,double转string

c string与常用数值变量互转 写了几个字符串与数值变量互相转换的几个函数,每次用到都要上网查一堆,耽误时间,写好放到这里备用。方法有很多,这里列出来测试过能用的,其他方法慢慢添加。以下函数自动判断int或者double…

C++下string类型转double类型

最近coding的时候随手写了std::stod()函数来进行类型的转换,发现输出的时候自动做了小数位的截取 尝试使用std::stold()函数转换成long double类型之后,依旧不能解决问题,输出依旧不是想要的 发现网上对这个问题的解答没有,于是…

double类型转换成int类型

1、案例演示 public class test09 {public static void main(String[] args) {double a 5000.44;double b 100.12;double v a / b;int i new Double(v).intValue();System.out.println(i);System.out.println(v);} } 运行结果: 49 49.944466640031955 2、源…

移动光猫超级管理员密码获取

我的型号是ZN-M142G 一 、开启telnet 1.电脑开启telnet (自行百度) 2.登录192.168.1.1 3.把路由器后台网址替换(如果光猫已经开启telnet请忽略)​​​​​​http://192.168.1.1/getpage.gch?pid1002&nextpagetele_sec_ts…

移动光猫只有一个lan口?其他是电视用,如何增lan口

输入192.168.1.1,用超级账号登陆,(如何得到超级账号呢,可以让维护小区的移动工作人员给你)我发现家里的光猫只有一个lan口,通过超级账号登陆发现,其他三个(lan1~lan3)都分…

移动光猫 烽火HG6145F 获取管理员密码 启用USB存储功能

总结一下移动光猫烽火HG6145F获取管理员密码的过程,从网上没有搜到这个型号,但是可以参考一下相关类似型号,参考链接附后。 1、连接光猫:首先连接好光猫的WIFI,确认可以访问路由默认网关192.168.1.1 2、获取光猫MAC&…

移动光猫连接移动硬盘变成超小型nas【HS8545M5

移动硬盘连接光猫usb接口 一.第一步 先准备好移动硬盘和光猫 我的移动硬盘装了个盒子1TB 连接好usb接口 我家的光猫是华为定制版的 HS8545M5 当然肯定不会这么简单的就完成了 2.这个需要登录光猫的超级管理员打开媒体共享功能的 当然移动公司不会简单给你超级账号的密码 可以…

最新中国移动光猫改桥接方式(中兴ZXHN F663NV9)地域:贵州 适用于动态超密

​ 话不多说,直接开干 1.首先拔掉光纤 2.把电脑网线插进光猫1口 输入管理地址192.168.1.1 ​ 3.接着输入管理员密码,就是光猫背面的那个 进入后台后选择 网络——远程管理 然后复制loid和password以及sn备用 4.然后重置光猫 用针恢复孔5秒以上&…

移动光猫(吉比特TEWA-272G)进入高级管理界面的简单方法

参加中国移动光纤宽带升级千兆活动后,之前通过超级用户身份已调成桥接模式的光猫(GS3101)免费更换成了吉比特TEWA-272G(2021-10-30生产,硬件版本号HV1.0.0.0、软件版本号 V1.0.0.0),只能用新设备后面注明的user和口令进入基础管理界面进行…

移动光猫GM219-s多LAN端口的网络开放

起因 最近(2018.08)装了移动的50M宽带(成都),在默认情况下GM219-S这款光猫总共有4个端口,但是只有LAN1口是可以连接电脑上网,其他的3个端口只能用于电视盒子之类的用途。就是下图这货→_→   …

移动光猫之桥接教程

背景:移动宽带默认是移动光猫拨号,使用的路由模式,但移动的猫太差劲,需要将移动光猫改为桥接模式,改用红米AC2100路由器进行拨号上网。说干就干,开工。 1、获取光猫超级用户和密码。 用户名:C…

网速更稳定,破解移动光猫GM219-S的超级账号及密码,光猫改桥接

前言 我家的宽带是河南的大内网移动500m快带,光猫性能太拉了,时不时就装死,并且网上的大多数教程都没法用,大部分漏洞的接口都堵上了。本来都打算找移动客服扯皮去,突然找到了一个教程拯救了我。 教程地址 教程&…

获取移动光猫(如HS8545M5等设备)pppoe密码明文

有时候忘记了自己的pppoe拨号密码,找回又很麻烦,这里教大家怎么把光猫的pppoe密码明文搞出来 首先使用超级账户登录到你的光猫 超级账户的密码一般是与光猫型号对应,是固定的,上网就型号能搜到(或者与地区相关联&…

获取中国移动光猫H2-2超管密码

最近闲的难受开始闲置利用,将两年前买的我家云和没用的硬盘闲置利用,上网心云,无奈由于中国移动路由器限制,每天收益几分钱,最多1毛1,只能解密家里中国移动光猫开启UPNP了。 家里宽带为:中国移动…

中国移动光猫获取超级密码教程

关键词:中国移动光猫、华为光猫 相关工具: HuaWeiONT_v2.0.7z 下载地址:http://res.extapps.com/pcsoft/HuaWeiONT_v2.0.7zhttp://res.extapps.com/pcsoft/HuaWeiONT_v2.0.7z 华为解密.zip 下载地址:下载 | 华为光猫配置解密工…

陕西移动宽带光猫 GM219-S 路由功能分离

陕西移动宽带光猫 GM219-S 路由功能分离 最近更换了陕西移动的100M宽带。移动公司送的光猫型号为GM219-S,自带路由和无线功能。以下为光猫外形。 装机师傅在调测好宽带后拒绝透露光猫的超级管理员用户名密码,且将光猫设置为猫路由模式。这样我自用的…