繁体   English   中英

第二个表的MySQL内部联接限制结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM