借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里怎么用?
就是这句
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 语句了.
我一般 sql 语句如果很难转换成 hql 语句, 就直接用 sql 语句了.
#4
HQL 不可能去支持 Oracle 窗口函数的,你只能采用原生 SQL 语句来进行查询。
#5
结贴。。。。
回3L,我是菜鸟不太懂这些,不过按我的理解 HQL其实最终也是要转化为SQL才能操作所对应的数据库的。所以SQL快一些。但是这其中又有可能有类似视图,索引之类的因素,所以我说不上来了。请问直接用SQL,你是指像平时一样的写法,还是HibernateSessionFactory有这样的方法直接执行SQL语句
回4L,了解拉。。。不过这个是SQL2005的函数。
那HQL不用对应数据库的函数没有办法做到重置排序字段的效果吗?比如 2,4,5,7。重置为1234
回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里怎么用?
就是这句
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 语句了.
我一般 sql 语句如果很难转换成 hql 语句, 就直接用 sql 语句了.
#4
HQL 不可能去支持 Oracle 窗口函数的,你只能采用原生 SQL 语句来进行查询。
#5
结贴。。。。
回3L,我是菜鸟不太懂这些,不过按我的理解 HQL其实最终也是要转化为SQL才能操作所对应的数据库的。所以SQL快一些。但是这其中又有可能有类似视图,索引之类的因素,所以我说不上来了。请问直接用SQL,你是指像平时一样的写法,还是HibernateSessionFactory有这样的方法直接执行SQL语句
回4L,了解拉。。。不过这个是SQL2005的函数。
那HQL不用对应数据库的函数没有办法做到重置排序字段的效果吗?比如 2,4,5,7。重置为1234
回3L,我是菜鸟不太懂这些,不过按我的理解 HQL其实最终也是要转化为SQL才能操作所对应的数据库的。所以SQL快一些。但是这其中又有可能有类似视图,索引之类的因素,所以我说不上来了。请问直接用SQL,你是指像平时一样的写法,还是HibernateSessionFactory有这样的方法直接执行SQL语句
回4L,了解拉。。。不过这个是SQL2005的函数。
那HQL不用对应数据库的函数没有办法做到重置排序字段的效果吗?比如 2,4,5,7。重置为1234