MySQL:从具有多个“多对多”关系表的多个表中选择数据

时间:2018-11-02 08:44:10

标签: mysql sql join many-to-many

有以下五个表格

请参阅此db-fiddle https://www.db-fiddle.com/f/c7mYgFSQUFhCbUoEvpAzpM/0

书籍

  • book_id(P.K。)
  • book_name

作者

  • author_id(P.K。)
  • 作者名

类别

  • cat_id(P.K。)
  • 猫名

(其中表 Authors Category 通过多对多关系连接到 Books

BookAuthor

  • bookauthor_id(P.K。)
  • book_id(F.K。)
  • author_id(F.K。)

BookCategory

  • bookcat_id
  • book_id(F.K。)
  • cat_id(P.K。)

对于给定的book_id,我想查询并获取book_name,author_name,cat_name。

如何在mysql中实现呢?

2 个答案:

答案 0 :(得分:0)

您可以使用以下查询

 SELECT b.book_name, a.author_name, c.cat_name
 FROM Books b
 JOIN BookAuthor ba ON b.book_id =ba.book_id
 JOIN Authors a ON a.author_id = ba.author_id
 JOIN BookCategory bc ON bc.book_id =b.book_id 
 JOIN Categories c ON bc.cat_id = c.cat_name
 WHERE b.book_id = 101 -- specify book id 

答案 1 :(得分:0)

您可能想要:

SELECT b.title, ba.authors, bc.categories
FROM books b LEFT  JOIN
     (SELECT ba.book_id, GROUP_CONCAT(a.name) as authors
      FROM bookauthor ba JOIN
           authors a
           ON a.auth_id = ba.auth_id
      GROUP BY ba.book_id
     ) ba
     ON b.book_id = ba.book_id LEFT JOIN
     (SELECT bc.book_id, GROUP_CONCAT(c.name) as categories
      FROM bookcategory bc JOIN
           categories c
           ON bc.cat_id = c.cat_id
      GROUP BY bc.book_id
     ) bc
     ON bc.book_id = b.book_id 
WHERE b.book_id = 101 -- specify book id 
GROUP BY b.book_id, b.title;

Here是db <>小提琴。

相关问题