选择分页连接行以可靠地限制不同的相关行

Selecting paged joined rows to a reliable limit of distinct related rows

考虑一个具有四个 table 的 SQL Server 2017 数据库; ABCD.

Table D 引用带有外键约束的 CC[=42 也是如此=] 到 BBA.

目的是 INNER JOIN 每个 table 在一起,选择 D 中满足特定条件的所有行,但仅限于table A 中定义的 n 行已加入。

这应该是可分页的,因此后续查询可以(具有定义的偏移量)将其结果集 D 行间接连接到下一组 n table A 行。

请注意,并非所有(甚至大部分)table A 的行与 tableD。因此,使用基本 SELECT DISTINCT TOP n 不会提供 table D 行的结果集,其中包含可靠数量的不同 table A 关系。

为此使用Window函数

SELECT
*
FROM
(
SELECT
    *, dense_rank() over (order by A.ID) AS R
FROM
    A
    INNER JOIN B ON B.ID_A=A.ID
    INNER JOIN C ON C.ID_B=B.ID
    INNER JOIN D ON D.ID_C=C.ID
) AS RES
WHERE
RES.R<=PUT_LIMIT_OF_A_HERE
PUT_LIMITS_OF_ROWS_HERE