簡體   English   中英

MySQL:從多個表中選擇數據,其中有多個“多對多”關系表

[英]MySQL: Selecting data from multiple table where there is more than one 'many to many' relationship tables

有五個表如下

請參考這個 db-fiddle https://www.db-fiddle.com/f/c7mYgFSQUFhCbUoEvpAzpM/0

圖書

  • book_id (PK)
  • 書名

作者

  • author_id (PK)
  • 作者姓名

類別

  • cat_id (PK)
  • 貓名

(其中表AuthorsCategory通過多對多關系連接到Books

書作者

  • bookauthor_id (PK)
  • book_id (FK)
  • author_id (FK)

圖書分類

  • bookcat_id
  • book_id (FK)
  • cat_id (PK)

對於給定的 book_id,我想查詢並獲取 book_name、author_name、cat_name。

我怎樣才能在mysql中實現這一點?

您可以使用以下查詢

 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 

你可能想要:

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;

是一個 db<>fiddle。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM