mysql:从多个表中选择数据,其中有多个“多对多”关系表

huwehgph  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(358)

下面有五张表格
请参考这把小提琴https://www.db-fiddle.com/f/c7mygfsqufhcbuoevpazpm/0

书号(p.k.)
书名
作者
作者id(p.k.)
作者姓名
类别
分类号(p.k.)
类别名称
(其中,表作者和类别通过多对多关系连接到书籍)
书籍作者
图书作者id(p.k.)
书号(f.k.)
作者id(f.k.)
图书分类
图书分类号
书号(f.k.)
分类号(p.k.)
对于给定的图书标识,我想查询并获取图书名称、作者名称、类别名称。
如何在mysql中实现这一点?

rggaifut

rggaifut1#

您可以使用下面的查询

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
bvn4nwqk

bvn4nwqk2#

你可能想要:

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;

这是一把小提琴。

相关问题