如何在 Hibernate 中使用 row_number 函数编写查询?
Posted
技术标签:
【中文标题】如何在 Hibernate 中使用 row_number 函数编写查询?【英文标题】:How to write query in Hibernate with row_number function present in it? 【发布时间】:2014-06-17 10:24:26 【问题描述】:我想将以下查询转换为 HQL
select X.* from (select tbl.*,ROW_NUMBER() over (partition by Col1 order by Col1) as RANK from table1 tbl where tbl.col2='22'
and (
tbl.col3 in (
'ABC'
)
)
) X
WHERE X.rank = 1;
需要帮助。 这是在 Oracle 上将 mysql group by 转换为等效 group by 的上下文中。
编辑: 我原来的 MySQL 查询是
select * from table1 tbl
where tbl.col2='22'
and tbl.col3 in ('ABC','XYZ')
group by col1;
我想先将其转换为 Oracle 等效查询,然后再转换为 HQL。
【问题讨论】:
【参考方案1】:我认为您的查询与此查询非常接近:
select X.*
from table1 tbl
where tbl.col2 = '22' and tbl.col3 = 'ABC' and
not exists (select 1
from table tbl2
where tbl2.col2 = tbl.col2 and tbl2.col3 = tbl.col3 and
tbl2.col1 < tbl.col1
);
唯一的区别是这两个查询如何处理col1
上的关系。这将返回所有这些值。您的将只返回其中一个。
也许这在 HQL 中对你有用。
【讨论】:
如果 Col1 不是数字数据类型怎么办? 以上内容应该适用于 Oracle 和 MySQL,并且很可能也适用于 HQL。<
运算符适用于大多数 SQL 数据类型。
我的目的是模拟分组依据,如果 col1 有重复值,您的查询可能会返回重复项
@user3705949 。 . .如果表中有唯一 ID,则可以解决此问题。您的原始查询依赖于 group by
的仅 MySQL 扩展,因此无论如何移植都会很困难。以上是关于如何在 Hibernate 中使用 row_number 函数编写查询?的主要内容,如果未能解决你的问题,请参考以下文章
我可以在不使用 ROW_NUM () OVER (ORDER BY xxxxx) 的情况下在 Sql Server 中对查询进行分页吗?