求一句hql语句

时间:2021-03-20 15:14:13
求一句hql语句,类似功能如下面的红色SQL代码,如果hql不行,请帮我把下面的红色SQL语句精简成一句SQL语句,谢谢

借row_number()函数更新排序字段值 
create table t1(c1 int ,c2 int)
insert t1(c1,c2) values(5,10)
insert t1(c1,c2) values(3,20)
insert t1(c1,c2) values(4,30)
insert t1(c1,c2) values(2,40)
insert t1(c1,c2) values(1,50)

select * from t1

c1          c2
----------- -----------
5           10
3           20
4           30
2           40
1           50

update t1 set t1.c1 =t.c1
from
(
select 
row_number() over (order by c2) as c1,
c2
from t1
) as t
where t.c2=t1.c2

select * from t1


c1          c2
----------- -----------
1           10
2           20
3           30
4           40
5           50

5 个解决方案

#1


UP
就是这句
update t1 set t1.c1 =t.c1 from ( select row_number() over (order by c2) as c1, c2 from t1 ) as t where t.c2=t1.c2 

在HQL里怎么用?

#2


好一条sql语句, 关注.....

#3


顺便问一下 lz 使用 sql 或 hql 那个执行效率高一些?, 
我一般 sql 语句如果很难转换成 hql 语句, 就直接用 sql 语句了.

#4


HQL 不可能去支持 Oracle 窗口函数的,你只能采用原生 SQL 语句来进行查询。

#5


结贴。。。。
回3L,我是菜鸟不太懂这些,不过按我的理解 HQL其实最终也是要转化为SQL才能操作所对应的数据库的。所以SQL快一些。但是这其中又有可能有类似视图,索引之类的因素,所以我说不上来了。请问直接用SQL,你是指像平时一样的写法,还是HibernateSessionFactory有这样的方法直接执行SQL语句


回4L,了解拉。。。不过这个是SQL2005的函数。
那HQL不用对应数据库的函数没有办法做到重置排序字段的效果吗?比如 2,4,5,7。重置为1234

#1


UP
就是这句
update t1 set t1.c1 =t.c1 from ( select row_number() over (order by c2) as c1, c2 from t1 ) as t where t.c2=t1.c2 

在HQL里怎么用?

#2


好一条sql语句, 关注.....

#3


顺便问一下 lz 使用 sql 或 hql 那个执行效率高一些?, 
我一般 sql 语句如果很难转换成 hql 语句, 就直接用 sql 语句了.

#4


HQL 不可能去支持 Oracle 窗口函数的,你只能采用原生 SQL 语句来进行查询。

#5


结贴。。。。
回3L,我是菜鸟不太懂这些,不过按我的理解 HQL其实最终也是要转化为SQL才能操作所对应的数据库的。所以SQL快一些。但是这其中又有可能有类似视图,索引之类的因素,所以我说不上来了。请问直接用SQL,你是指像平时一样的写法,还是HibernateSessionFactory有这样的方法直接执行SQL语句


回4L,了解拉。。。不过这个是SQL2005的函数。
那HQL不用对应数据库的函数没有办法做到重置排序字段的效果吗?比如 2,4,5,7。重置为1234