【发布时间】:2021-04-27 12:36:13
【问题描述】:
我在 Oracle Query 中遇到了一个问题,以实现以下用例,
假设我有两张桌子:
Table 1 : product
productId - Integer - primaryKey
productName - Varchar
Table 2 : product_sequence
productId - Integer - primaryKey
sequenceId - Integer - primaryKey
orderId - Integer
orderName - Varchar
product 表有 1000 个条目,product_sequence 表有 10K 个条目
要求:
- (分页)在产品表中获取从 0 到 100 / 100 到 200 / 等的条目
- 用于在 UI 中显示分页的 productId 的不同计数(请查看下面的示例查询)
- 按“product”表中的“productName”和“product_sequence”表中的“orderName”过滤
查询(已尝试):
SELECT
p.productId, p.productName, ps.orderId, ps.orderName,
COUNT(distinct p.productId) OVER () AS TOTAL
FROM (
select *
from product
OFFSET 0 ROWS FETCH NEXT 100 ROWS ONLY
) p
JOIN product_sequence ps on p.productId=ps.productId
WHERE ps.orderId IN ('12','13','14');
注意:上述查询将在 Oracle 中工作,但问题是
预期: 从 'product' 表中返回 100 个条目,并在 'product_sequence' 表中映射条目
实际: 它首先在产品中限制 100 个条目,然后过滤 orderId,以便返回的条目数从 100 减少到更少 我同意我的查询不正确:它首先在子查询的“产品”表中限制为 100,然后在第二个表中进行过滤以减少计数
有人可以帮我解决这个问题吗?任何帮助表示赞赏。
如果我的问题不清楚,请告诉我,我可以提供更多信息。
【问题讨论】:
-
没有排序的分页没有什么意义。
标签: java sql oracle sql-query-store