Ограничить количество записей во внешнем соединении на основе левой таблицы - PullRequest
1 голос
/ 12 января 2011

У меня есть две таблицы, для которых я выполняю внешнее соединение: «Post» оставил внешнее соединение с «Comments».

Между постом и комментариями существует отношение один ко многим.

Я хотел бы иметь возможность получить первые, скажем, 10, Записи постов и все связанные комментарии (если таковые имеются) для каждого Поста.

Я обычно делал бы так, чтобы иметь общее табличное выражение и использовать ROW_NUMBER () OVER. Однако ROW_NUMBER () считает каждую строку, что в этом случае не будет работать, так как я хочу только считать записи Post.

Я смотрел на ROW_NUMBER () OVER (PARTITION), но он не работает так, как я ожидал.

Так что если хотите первые 5 постов, я бы получил что-то вроде:

PostNumber     PostId     CommentId
1              1          1
1              1          2
2              2          -
3              8          3
3              8          4
4              9          5
5              15         -

1 Ответ

1 голос
/ 12 января 2011

Обратите внимание на использование DENSE_RANK function

Возвращает ранг строк в разделе набора результатов без пробелов в ранжировании.Ранг строки равен единице плюс количество различных рангов, предшествующих данной строке.

Что-то вроде

;WITH Vals AS (
        SELECT  p.*,
                DENSE_RANK() OVER(ORDER BY p.PostID) DenseRankID
        FROM    Post p LEFT JOIN
                Comments c ON p.PostID = c.PostID
)
SELECT  *
FROM    Vals 
WHERE   DenseRankID <= 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...