具有分页和排序的SQL语句(连接表)

时间:2016-11-06 16:56:40

标签: sql sql-server pagination

我有两个表(图书,作者)与 ManyToMany 的关系。 我需要SQL语句来检索带有作者的书籍按作者/书籍排序。重要的是我必须使用分页(偏移...在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

但我认为这不是有效的方式。

2 个答案:

答案 0 :(得分:1)

这样的东西?

   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 

答案 1 :(得分:-1)

表1

sno   exam      questions   time_duration
1   unit test    1              10
2   mock 1       2              10
3   mock2        5              10
4   mock3        6               6

表2

qid answer user_attempt_option
1      1           1
2      2           3
2      3           4
3      4           1
3      1           2
3      2           3
3      3           1