第二个表中的MySQL内连接限制结果

时间:2013-09-25 00:25:25

标签: mysql sql

我的表格中有以下数据。

Table Books
Id | Book_Name
1  | Java Programming
2  | PHP Programming
3  | HTML5

Table Chapters
Book Id | Chapter_Number
1       | Chapter 1
1       | Chapter 1v2
1       | Chapter 1v3
2       | Chapter 2 Release 1
2       | Chapter 2 Rev.
3       | Chapter 1
4       | Chapter 1

我想要实现的是将章节数量从每个书籍章节的回报限制为仅2行。

我想要的数据示例

Book Id | Book Name | Chapter_Number
1  | Java Programming | Chapter 1
1  | Java Programming | Chapter 1v2
2  | Java Programming | Chapter 2 Release 1
2  | Java Programming | Chapter 2 Rev.
3  | Java Programming | Chapter 1
4  | Java Programming | Chapter 1

有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

执行此操作的一种方法是引入rank列。您可以使用mysql

使用user-defined variables执行此操作
select *
from (
  select b.id, 
         b.book_name, 
         c.chapter_number,
         @rnk:=IF(@prevbookid=b.id,@rnk+1,1) rnk,
         @prevbookid:=b.id
  from books b
    join chapters c on b.id = c.bookid
    join (select @rnk:= 0, @prevbookid:= 0) t
  order by b.id, c.chapter_number
  ) t
where rnk <= 2

答案 1 :(得分:0)

我不确定如何使用SQL来做到这一点。您可以借助一些代码在SQL中执行此操作:

首先,获取章节ID列表:

select distinct id from Chapter;

然后你必须在每个id上迭代(在代码中),运行如下的查询:

select * from Chapter join Book on Book.id = Chapter.Book_id where Chapter.Book_id=(the iterated id) limit 2;

显然,这不是很容易扩展,因为你必须为列表中的每个id运行一个查询。这是一个很好的问题。我会投票。也许某人可以提供仅限SQL的答案。