考虑一个带有四个表的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 行的结果集。
答案 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