为了账号安全,请及时绑定邮箱和手机立即绑定

使用sql order by 和rownum 查询的问题,例子如下!求大神指点

使用sql order by 和rownum 查询的问题,例子如下!求大神指点

守着一只汪 2021-08-24 19:15:46
select * from (select * from Ft_Sms_Interact_Dt order by send_time desc) where handle_status='0' and handle_user is null and rownum<6;这条语句能查出想要的结果,但是如果转换成HQL:select * from (select * from FtSmsInteractDt order by sendTime desc) where handleStatus='0' and handleUser is null and rownum<?;就会报下面的异常:unexpected token: * near line 1, column 8 [select * from (select * from com.umessage.smsManager.domain.FtSmsInteractDt order by sendTime desc) where handleStatus='0' and handleUser is null and rownum<?]查了一下应该是hql中子查询语句不能放在where前面,试了好多办法,都没有得到想要的数据,求大神指点
查看完整描述

2 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

看这么一段吧:
在HQL中子查询必须出现在where子句中,而且必须用一对圆括号括起来。为什么必须要出现在where字句之后呢?其实我们大家仔细想一下也就知道了,在Hibernate中查询的任何一个实体对象都要有据可循,这个“据”就是Hibernate的主配置文件,也就是说凡是出现在HQL from字句中的实体对象,都必须要在Hibernate主配置文件中有明确的配置。
所以在Hibernate中无法支持SQL语句中的那种出现在from字句之后的那种动态视图子查询。
你这段查询,就不要考虑使用HQL了,用SQL就是了。

查看完整回答
反对 回复 2021-08-30
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

order by 列a desc降序排列,order by 列a asc升序排列,当a列的值是一样的情况下,order by 列a 也就失去了意义,值相同哪里来的升序降序呢。因此如果你想让结果变动,可以按其他列排序呀,或者按rownum排序,即order by rownum asc ,order by rownum desc。
希望能帮到你。

查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 359 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信