【发布时间】:2010-02-24 23:06:15
【问题描述】:
我在 oracle 中有以下查询,我想在 hibernate 中使用,但无法确定如何在内部查询中使用 rownum 变量。查询如下:
select emp.prof_key, emp.prof_display_name
from empinst.emp emp
where emp.prof_key IN (select x.object_key
from (select event.object_key as object_key
from empinst.eventlog event
where event.event_name = 'profiles.created'
and event.event_source = 'Profiles'
order by event.created desc) x
where rownum <= 10)
我可以弄清楚如何做到这一点的唯一方法是将查询分成两部分,但我认为在休眠中必须有更有效的方法。
提前致谢。
迈克尔。
【问题讨论】:
-
为什么要限制子查询?子查询中返回的行数与实际结果集中的行数之间(通常)没有太大关系。
-
从 eventlog 中随意挑选前 10 行似乎毫无意义。是否打算进行某种随机抽样?另外,“rownum 变量”是什么意思?您使用了文字值,您是在问如何在那里使用绑定变量吗?
-
rownum变量是oracle中的保留字,返回行号,用于分页。我只想显示十行的原因是因为我想查看最近的 10 条事件日志记录。 10 的数量是任意的,但我只想查看最多 x 条记录。表本身可以包含 10,000 条记录...通过运行不带内部查询的查询和 rownum 查询在大约 24 秒内返回,内部查询在 0.3 秒内返回。