SQL запрос из 3 таблиц по 2-м связующим — возможно ли такое?
Есть такие сущности - Книга, Автор, Рубрика. У книги может быть несколько авторов, книга может принадлежать нескольким рубрикам, автор может написать много книг. Учитывая это, спроектировал таблицы так:
books - id, title
authors - id, name, surname
topics - id, title
Как составить запрос, чтобы вывести список всех книг с соответствующими им рубриками и авторами? Подозреваю, что это будет смесь вложенных select и нескольких join, но никак не получается слепить.
SELECT books.*, topics.id as topic_id, topics.title as author_title, authors.id as author_id, authors.name as author_name FROM books
LEFT JOIN book_author ON book_author.book_id = books.id
LEFT JOIN book_topic ON book_topic.book_id = books.id
LEFT JOIN authors ON book_author.author_id = authors.id
LEFT JOIN topics ON book_topic.topic_id = topics.id
Только учтите, что при двух авторах и трех рубриках в одной книге вы получите 6 результирующих строк.
SELECT books.title,
GROUP_CONCAT(distinct CONCAT(authors.surname, ' ', authors.name) SEPARATOR ', ') as autors,
GROUP_CONCAT(distinct topics.title ORDER BY topics.title ASC SEPARATOR ', ') as titles
FROM books
LEFT JOIN book_author ON book_author.book_id = books.id
LEFT JOIN book_topic ON book_topic.book_id = books.id
LEFT JOIN authors ON book_author.author_id = authors.id
LEFT JOIN topics ON book_topic.topic_id = topics.id
group by books.id
Этот SQL-запрос решает проблему дублирования книг при нескольких авторах и нескольких рубриках