关于Java 对数据库查询去重复的问题。

svgr314 2012-09-04 04:51:09

我使用Query query = em.createQuery(HQL);的方法来查询一张表(实体)。

HQL语句中想要对该实体中某个属性相同的记录进行去重(不是整条记录完全相同,是一个字段相同),只保留ID最大的那一条!

请问HQL语句该如何写?

貌似用distinct可以去重,但是不能指定过滤掉的是哪几条而保留哪一条!
...全文
348 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxhcloth 2012-09-05
  • 打赏
  • 举报
回复
忘了加注释了,上面的same是你说的相同的字段。

还有看了楼主的结贴率是0%,希望楼主问题解决了别忘了结贴,营造好的学习氛围。
zxhcloth 2012-09-05
  • 打赏
  • 举报
回复
HQL最终都会转换成sql,所以我给你写个sql吧,楼上们写的sql,思路上可以解决你的问题,但不是最好的方案,你这个问题其实是一个很经典的临界问题,一通百通,我给你“一”:

查询相同记录比最大ID小的
select * from table a
where exists (
select 0 from table b where a.same = b.same and a.id < b.id
)

查询相同记录最大ID的
select * from table a
where not exists (
select 0 from table b where a.same = b.same and a.id < b.id
)

删除相同记录比最大ID小的
delete from table a
where exists (
select 0 from table b where a.same = b.same and a.id < b.id
)
老韩同学 2012-09-05
  • 打赏
  • 举报
回复
写sql select * from 表名 a where a.id= (select max(id) from emp b where a.id=b.id)
辛格瑞拉 2012-09-05
  • 打赏
  • 举报
回复
delete from tab_1 a where rowid <(select max(rowid) from tab_1 b where b.属性=a.属性)

改改可用 ,祝你好运
老韩同学 2012-09-05
  • 打赏
  • 举报
回复
写sql的时候进行处理比如 select * from 表名 where id = (select max(id) from 表名 group by id)
wenhaoxp1987 2012-09-05
  • 打赏
  • 举报
回复
HQL:select max(u.id) from User u group by u.userName由于Hibernate 要进行复合嵌套查询的话要配置映射文件的,所以建议用原生态的sql

SQL
:select * from user t1 where t1.id in (select max(id) from user t2 group by t2.user_name)
svgr314 2012-09-05
  • 打赏
  • 举报
回复
= =0 卧槽…… 这年头60分都木有人看了吗?
svgr314 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

order by id desc 就可以了 ,其实用 group by 也可以分组的。
[/Quote]


group by是可以分组,但是不能保留我想要的那条记录啊~

额…… 我说的这个id就是一个属性,不是那个主键ID啦。也就是保留某个字段最大的那条记录。
  • 打赏
  • 举报
回复
order by id desc 就可以了 ,其实用 group by 也可以分组的。
svgr314 2012-09-04
  • 打赏
  • 举报
回复
本人新手啊~ 求各位大大指教!!! T _ T

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧