SQL-запрос для получения списка авторов, написавших хотя бы книгу по всем жанрам
Таблицы
Author_id | Author_info => authors Genre_id | Genre_info => genres Author_id | Genre_id | Book_id => books
Я использую Mysql, какой лучший способ сделать это?
Если N - количество разных жанров:
select author_id, count(distinct genre_id) as genres from books group by author_id having genres = N
Предполагаемая схема базы данных как эта
authors |- Author_id -|- Author_info -| genres |- Genre_id -|- Genre_info -| books |- Author_id -|- Genre_id -|- Book_id -|
Запрос
SELECT authors.Author_id FROM authors LEFT INNER JOIN books ON (authors.Author_id = books.Author_id) GROUP BY authors.Author_id HAVING COUNT(DISTINCT books.Genre_id) = (SELECT COUNT(*) FROM genres)
Для написания хотя бы книги по всем жанрам
Try ...
select author_id, count(distinct genre_id) as genres from books group by author_id having genres >= 1
Попробуйте это:
SELECT Author_id FROM books INNER JOIN Genre USING (Genre) GROUP BY Author_id HAVING COUNT(Author_id) >= (SELECT COUNT(*) FROM Genre);