t2: select * from ( select t1.key, t1.a, t2.b from t1, t2 w-6ren">
gpt4 book ai didi

java - "parent"表上的 Oracle rownum

转载 作者:行者123 更新时间:2023-12-01 18:03:24 25 4
gpt4 key购买 nike

我们使用 Oracle rownum 查询两个具有一对多关系的表 t1->t2:

select * from
(
select t1.key, t1.a, t2.b
from t1, t2
where t1.key=t2.key and <filter conditions>
order by t1.a, t2.b
)
where rownum <= 500

这工作正常,因为它返回前 500 行。但我们想要的是返回 t1 的前 500 行 - 然后返回与之相关的所有 t2 行。最好的方法是什么?

我们可以删除 rownum sql 用法,并且在 Java 中只需从结果集中读取前 500 个唯一的 t1.key 值(这将超过 500 行)结果集)。但尚不清楚这是否会明显变慢。

最佳答案

我认为您可以通过使用dense_rank()分析函数来完成此任务:

select * from
(
select t1.key, t1.a, t2.b,
dense_rank() over (order by t1.a, t1.key) as rnk
from t1, t2
where t1.key=t2.key
and <filter conditions>
)
where rnk <= 500
order by a, b

无论如何,如果您养成使用 ANSI 连接语法的习惯,那就更好了。

编辑

如果保证 t1.at1 中具有唯一值,则上述内容应该可以正常工作。如果没有,那么您可能会发现我的查询与原始查询的 order by 逻辑不太匹配。但我不知道我是否能做点什么。

问题在于,由于您按 t1.a, t2.b 排序,因此在原始查询中,无法保证所有结果都具有相同的 t1.key 值将被分组在一起,这使得您不清楚“前 500 行”逻辑应该如何基于 t1.key 工作。

关于java - "parent"表上的 Oracle rownum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38907098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com