使用左连接从表中选择下N行

时间:2017-11-24 23:07:20

标签: sql join fetch

我正在编写一个程序,从数据库中选择公司列表并在API上返回它们。结果以25为增量进行分页。查询本身从我的公司表中选择所有数据,然后在链接表上进行左连接以获得与该公司关联的代表列表。问题是,它只返回25行,而左连接可能会导致选择25家公司需要更多行。如何修改我的查询以选择前25个公司,而不是前25行。

SELECT 
[dbo].[ClientAccounts].*,
[dbo].[AccountLink].[RepId]
 FROM [dbo].[ClientAccounts]
LEFT JOIN [dbo].[AccountLink] ON [dbo].[AccountLink].[AccountID] = [dbo].[ClientAccounts].[ID]
WHERE [dbo].[ClientAccounts].[ClientID] = 10
ORDER BY [dbo].[ClientAccounts].[ID] ASC
OFFSET 0 ROWS
FETCH NEXT 25 ROWS ONLY

1 个答案:

答案 0 :(得分:1)

一种方法是首先收集25行,然后再将它们连接起来。

您可以尝试这样的事情:

WITH accounts AS (
    SELECT * FROM [dbo].[ClientAccounts]
    ORDER BY [dbo].[ClientAccounts].[ID] ASC
    OFFSET 0 ROWS
    FETCH NEXT 25 ROWS ONLY
)
SELECT
    accounts.*,
    [dbo].[AccountLink].[RepId]
FROM accounts
LEFT JOIN [dbo].[AccountLink] ON [dbo].[AccountLink].[AccountID] = 
[dbo].[ClientAccounts].[ID]

请记住,自MS SQL Server 2008以来,Microsoft支持CTE(公用表表达式)。