[英]MySQL Inner Join Limit Result From Second Table
我的表中有以下数据。
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
有办法吗?
一种方法是引入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
我不确定如何仅使用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的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.