【发布时间】:2014-11-11 21:37:06
【问题描述】:
我正在从一个表中选择并使用多对一关系进行左连接。
我要解决的问题是分页。我只想在 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
我想取回连接产生的行数,但只在 tableA 的 0-9(或 10-19)上
为了澄清,每个 tableA 行有多个 tableB 行。我只想根据 tableA 进行选择和分页,但仍要返回 tableB 上所有连接的条目。
【问题讨论】:
-
您的订单在哪里?你如何确定“相同”的行? “所有连接”是什么意思?
-
您找到解决方案了吗?在断言一个总订单以确保您不会得到重复之后,一种蛮力的方法是从数据库中获取完整的集合并在用户代码中减少结果(即进行分页)。
标签: sql sql-server select join