MySQL: выбор данных из нескольких таблиц, в которых имеется более одной таблицы отношений «многие ко многим» - PullRequest
0 голосов
/ 02 ноября 2018

Есть пять таблиц следующим образом

Пожалуйста, обратитесь к этой БД-скрипке https://www.db -fiddle.com / ж / c7mYgFSQUFhCbUoEvpAzpM / 0

Книга

  • book_id (P.K.)
  • book_name

Авторы

  • author_id (P.K.)
  • author_name

Категория

  • cat_id (P.K.)
  • cat_name

(где таблицы Авторы и Категория связаны с Книгами через отношения многие ко многим)

BookAuthor

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

BookCategory

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

Для заданного идентификатора книги я хочу запросить и получить имя_книги, имя_пользователя, имя_каталога.

Как я могу добиться этого в MySQL?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы, вероятно, хотите:

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;

Здесь - это дБ <> скрипка.

1008 *

0 голосов
/ 02 ноября 2018

Вы можете использовать запрос ниже

 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 
...