首页 > 解决方案 > 如何避免这种嵌套查询

问题描述

我有一张category桌子,需要为它做分页。我正在使用 JSF,并在 XML 中查询。有什么办法可以更好地优化这个查询。

SELECT
    *
FROM
    (
        SELECT
            categories.*,
            ROWNUM rn
        FROM
            (
                SELECT
                    *
                FROM
                    (
                        SELECT
                            *
                        FROM
                           categories
                        WHERE
                          name LIKE 'FAMILY%'
                        ORDER BY
                            id
                    )
                WHERE
                    ROWNUM < 21
            ) categories
    )
WHERE
    rn > 10;

标签: sqloracle

解决方案


在数据库版本 12 上,有可用的偏移和获取功能,因此您的查询可能如下所示

SELECT *
  FROM categories
 WHERE name LIKE 'FAMILY%'
 ORDER BY id
OFFSET 10 rows -- skips first 10 rows of the result
 FETCH 11 rows only;

请试试那个

可以使用以下查询检查数据库版本

select * from v$version;

推荐阅读