Выбор постраничных соединенных строк до надежного предела различных связанных строк - PullRequest
0 голосов
/ 13 июня 2018

Рассмотрим базу данных 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 не обеспечит результирующий набор таблиц D строк с надежным числом различных таблиц A связей.

1 Ответ

0 голосов
/ 24 июня 2018

используйте для этого оконную функцию

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
...