您的位置:时时app平台注册网站 > 编程知识 > MySQL大表中重复字段的查询效率方法时时app平台注

MySQL大表中重复字段的查询效率方法时时app平台注

2019-11-08 01:34
 ---- ------------------ 
| Id | Email            |
 ---- ------------------ 
| 1  | john@example.com |
| 2  | bob@example.com  |
 ---- ------------------ 

# Write your MySQL query statement below
delete p1 from  Person p1,Person p2 where p1.Email = p2.Email and p1.Id > p2.Id
SELECT `id`,`name`     FROM `table`     WHERE `name` in (        SELECT `name`        FROM `table`        GROUP BY `name` HAVING count(`name`) >1    );  

SQL重复记录查询 查询四个字段、多表查询、删除重复记录的不二秘诀,sql字段

SQL重复记录查询

1、查找表中多余的重复记录,重复记录是遵照单个字段(peopleId卡塔尔来剖断 

select * from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 

例二: 

select * from testtable 
where numeber in (select number from people group by number having count(number) > 1 ) 

能够摸清testtable表中number相像的笔录  

2、删除表中多余的重复记录,重复记录是依靠单个字段(peopleId卡塔 尔(英语:State of Qatar)来决断,只留有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、查找表中多余的重复记录(八个字段卡塔 尔(英语:State of Qatar)  

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子句中节约此列卡塔 尔(英语:State of Qatar)  

(四)  

询问重复 

select * from tablename where id in ( 

select id from tablename  

group by id  

having count(id) > 1 

) 

上述正是小编为大家带给的SQL重复记录查询 查询多少个字段、多表查询、删除重复记录的不二秘籍的全体内容了,希望对我们有着支持,多都赐教帮客之家~

查询七个字段、多表查询、删除重复记录的法门,sql字段 SQL重复记录查询 1、查找表中多余的重复记录,重复记录是依附单...

譬喻说,在运作你的查询语句之后,上边的 Person 表应重回以下几行:

 

 

SELECT a.`id`, a.`name`     FROM `table` a, `tmptable` t     WHERE a.`name` = t.`name`;   
 ---- ------------------ 
| Id | Email            |
 ---- ------------------ 
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
 ---- ------------------ 
Id 是这个表的主键。

 

编排一个 SQL 查询,来删除 Person 表中具有重复的电子邮箱,重复的信箱里只保留 Id *最小 *的那个。

  不过如此并不可能博取说有再度字段的id值。(只收获了小小的一个id值)

  查询哪些字段是再次的也轻便

 

 

  用 distinct去重复

SELECT `name`,count(`name`) as count     FROM `table`     GROUP BY `name` HAVING count(`name`) >1     ORDER BY count DESC;   

  然则要三遍查询到再一次字段的id值,就必需使用子查询了,于是利用上面的语句来兑现MySQL大表重复字段查询。

SELECT min(`id`),`name`     FROM `table`     GROUP BY `name`;   
SELECT distinct a.`id`, a.`name`     FROM `table` a, `tmptable` t     WHERE a.`name` = t.`name`;   

 

  可是那条语句在mysql中功能太差,感到mysql并从未为子查询生成不常表。

  于是采纳先创立不经常表

create table `tmptable` as (       SELECT `name`        FROM `table`        GROUP BY `name` HAVING count(`name`) >1    );  

  结果这一次结果相当慢就出来了。

  假使单独是搜索数据库中name不重复的字段,比较轻易

数据库中有个大...

  MySQL大表重复字段应该怎么样询问到吧?这是成百上千人都超出的难点,上面就教你三个MySQL大表重复字段的询问艺术,供你参谋。

  然后利用多表连接查询

 

  数据库中有个大表,要求索求此中的名字有重新的记录id,以便相比。

 

本文由时时app平台注册网站发布于编程知识,转载请注明出处:MySQL大表中重复字段的查询效率方法时时app平台注

关键词: