使用JOIN进行SQL Server SELECT分页

Sea*_*256 6 sql sql-server select join

我正在从一张桌子中选择一个与多对一关系进行左联接.

我要解决的问题是分页.我只想在tableA上进行分页.

例:

SELECT * 
FROM tableA 
[WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

这将返回tableA的第0-9行.完美.

现在问题出在我引入连接的时候.我仍然希望tableA的行1-10,但是当我进行连接时,它会按预期引入额外的行,因为tableB将有多个条目连接到每个tableA行.所以现在我不再从tableA获得相同的行,我可能只获得前两行但由于连接而总共有10行.

SELECT * 
FROM tableA 
LEFT JOIN tableB ON foo = bar 
[WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)

我希望返回连接产生的行数,但仅限于tableA的0-9(或10-19)

为了澄清,每个tableA行有多个tableB行.我想仅基于tableA选择和页面,但仍然返回tableB上所有连接的条目.

小智 5

在这种情况下,您可以使用内部查询

SELECT *
   FROM (
   SELECT * FROM tableA [WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
   ) q
JOIN tableB on foo = bar [WHERE HERE]
Run Code Online (Sandbox Code Playgroud)