
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重复项中的最后一条数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)