选择已分页的已连接行,以显示不同相关行的可靠限制

时间:2018-06-12 21:59:57

标签: sql sql-server join distinct sql-server-2017

考虑一个带有四个表的SQL Server 2017数据库; A B C D

D 引用带有外键约束的 C C 指向 B ,以及 B A

目的是将INNER JOIN每个表放在一起,选择满足特定条件的 D 中的所有行,但只能达到定义数 n A 中的行>已加入。

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

请注意,并非所有(甚至大多数)表 A 的行与表 D 中的行之间没有更多有效关系。因此,使用基本SELECT DISTINCT TOP n不会提供具有可靠数量的不同表 A 关系的表 D 行的结果集。

1 个答案:

答案 0 :(得分:1)

为此使用窗口功能

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