SQL语句分页和排序(连接表)
问题描述:
我有两个表(书籍,作者)与多对多关系。 我需要SQL语句检索书籍作者,按作者/书籍排序。重要的是,我必须检索他们与分页(抵消...在sql中获取)。 当我连接表时,结果中有重复(当然)和offset/fetch不能用于此结果的问题之一。结果必须排序的另一个问题(当然不是子页面,但所有书籍)。SQL语句分页和排序(连接表)
我有一个想法:(它通过检索作者姓名排序,分页包括书籍)
select b.id, b.title, a.name from Books b inner join Books_Authors ba
on ba.bookID = b.id inner join Authors a
on ba.authorID = a.id
where a.name in (select name from Authors order by name offset 9 rows fetch next 3 rows only)
order by a.name
但我认为这不是有效的方法。
答
像这样?
select * from
(
select tmp1.*, ROW_NUMBER() over(partition by b.title, a.name order by b.id, a.id) rang2
from
(
select a.id, b.id, b.title, a.name, ROW_NUMBER() over(partition by b.title, a.name order by b.id, a.id) rang
from Books b inner join Books_Authors ba on ba.bookID = b.id
inner join Authors a on ba.authorID = a.id
) tmp1 where rang=1
) tmp2
where rang2 between 3 and 9
order by title, name
根据您使用的MSSS的版本来决定该方法。看看这个链接:http://*.com/a/5620802/100283 –
@马克克拉姆,我的问题,我必须检索,例如,3本书(如果pagesize = 3)及其作者(来自表作者)。所以我应该加入两张表,但是结果会包含书籍的出版物(因为书可以有几个作者),所以如果我使用这个结果分页(例如OFFSET ... FETCH),我不会得到3本书(I如果这本书有3位作者,我会得到1本书)。 – Ddd
然后,您可能需要使用交叉应用从Books表中检索所需的行。 –