SQL Server使用联接选择分页

SQL Server使用联接选择分页,sql,sql-server,select,join,Sql,Sql Server,Select,Join,我从一个表中进行选择,并使用多对一关系进行左连接 我要解决的问题是分页。我只想在表格上翻页 例如: SELECT * FROM tableA [WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY 这将返回tableA的第0-9行完美 现在的问题是当我引入连接时。我仍然想要tableA的第1-10行,但是当我进行连接时,它会像预期的那样引入额外的行,因为tableB将有多个条目针对每个tableA行进行连接。所以现在我不再从tableA中得到相

我从一个表中进行选择,并使用多对一关系进行左连接

我要解决的问题是分页。我只想在表格上翻页

例如:

SELECT * 
FROM tableA 
[WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
这将返回tableA的第0-9行完美

现在的问题是当我引入连接时。我仍然想要tableA的第1-10行,但是当我进行连接时,它会像预期的那样引入额外的行,因为tableB将有多个条目针对每个tableA行进行连接。所以现在我不再从tableA中得到相同的行,我可能只得到前2行,但由于连接,总共有10行

SELECT * 
FROM tableA 
LEFT JOIN tableB ON foo = bar 
[WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
我希望返回join生成的尽可能多的行,但只返回tableA的0-9(或10-19)行


为了澄清,每个tableA行都有多个tableB行。我只想基于tableA进行选择和分页,但仍然要为tableB上的所有联接返回一个条目。

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

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

我认为它不适合您的查询,因为此0-10获取将应用于join返回的reults。您是否尝试过这样做:

SELECT * FROM tableB on foo in 
    SELECT bar FROM tableA [WHERE HERE] OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

您点的菜在哪里?如何确定“相同”行?“所有连接”是什么意思?你找到解决方案了吗?在断言一个总的顺序以确保您不会得到重复的顺序之后,一种蛮力方法是从数据库中获取完整的顺序集,并在用户代码中减少结果(即进行分页)。我有个问题。如果我在tableB上的where子句只返回5行,而不是tableA生成的10行,那么这不会只返回5个结果吗?如果tableA没有首先限制,什么时候可能会有更多的匹配?是的,在这种情况下,只返回5行。这不是你的要求吗“我想得到联接产生的尽可能多的行,但只在tableA的0-9(或10-19)上”吗?这就是我写的,但我想总是从tableA中得到10行。我们将把连接合并为单个对象(连接将是子对象)。因此,如果我们要求第0-9行,我们希望最后有10个对象。也许我需要坐下来重写我原来的帖子。