mysql查询指定字段值下重复数据方法

mysql查询指定字段值下重复数据方法,第1张

select from credit where project_id =160990 and PERSON_ID in ( select PERSON_ID from (select PERSON_ID , count(1) from credit where project_id =160990 group by PERSON_ID having count(1)>1) k)

select

from table  ###

where not exists (

select from table  ###

where # = #

and ## < ##

)

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,只有用二重循环查询来解决。

给个例子把,比如:表table_a 4条数据

id A B C D

01 ab 1a2 1b2 121

02 ab 2a3 3b3 4a1

03 ac 1a2 1b2 121

04 ac 2a4 3b2 52g

何让A字段重复取条 比

01 ab 1a2 1b2 121

03 ac 1a2 1b2 121

保留相同A值id行

select

from table_a a

where not exists (

select 1 from table_a b

where bA = aA

and bid < aid

)

重复记录是说所有字段都重复吗,没有主键是吗,如果是这样,删除最后一条还是第一条没有区别;

如果说重复记录是不包括主键id的字段,可以使用order by id来排序,获取到最后一条数据

或者用group by(重复的字段),然后用max(id)获取最后的一条

一般情况下,数据库去重复有以下那么三种方法:

第一种:

两条记录或者多条记录的每一个字段值完全相同,这种情况去重复最简单,用关键字distinct就可以去掉。例:

SELECTDISTINCTFROMTABLE

第二种:

两条记录之间之后只有部分字段的值是有重复的,但是表存在主键或者唯一性ID。如果是这种情况的话用DISTINCT是过滤不了的,这就要用到主键id的唯一性特点及groupby分组。例:

SELECTFROMTABLEWHEREIDIN(SELECTMAX(ID)FROMTABLEGROUPBY[去除重复的字段名列表,])

第三种:

两条记录之间之后只有部分字段的值是有重复的,但是表不存在主键或者唯一性ID。这种情况可以使用临时表,讲数据复制到临时表并添加一个自增长的ID,在删除重复数据之后再删除临时表。例:

//创建临时表,并将数据写入到临时表

SELECTIDENTITY(INT1,1)ASID,INTONEWTABLE(临时表)FROMTABLE

//查询不重复的数据

SELECTFROMNEWTABLEWHEREIDIN(SELECTMAX(ID)FROMNEWTABLEGROUPBY[去除重复的字段名列表,])

//删除临时表

DROPTABLENEWTABLE

mysql有函数可以取出重复的 distinct

select distinct ( name) form aa where name in ('zhang','wang','wang');

select  from user_address

where uid in (select uid from user_address group by uid having count(uid) > 1)

以上就是关于mysql查询指定字段值下重复数据方法全部的内容,包括:mysql查询指定字段值下重复数据方法、在mysql数据库中如何让某个字段有重复的只取一条、如何获取mysql重复项中的最后一条数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10155756.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存