Запрос SQL - PullRequest
       3

Запрос SQL

0 голосов
/ 18 ноября 2011

SQL-запрос для получения списка авторов, написавших хотя бы книгу по всем жанрам

Таблицы

      Author_id  |  Author_info  => authors
      Genre_id   |  Genre_info   => genres
      Author_id  |  Genre_id  |  Book_id  => books

Я использую Mysql, какой лучший способ сделать это?

Ответы [ 4 ]

2 голосов
/ 18 ноября 2011

Если N - количество разных жанров:

select author_id, count(distinct genre_id) as genres
from books 
group by author_id 
having genres = N
1 голос
/ 18 ноября 2011

Предполагаемая схема базы данных как эта

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)
0 голосов
/ 02 декабря 2016

Для написания хотя бы книги по всем жанрам

Try ...

select author_id, count(distinct genre_id) as genres
from books 
group by author_id 
having genres >= 1
0 голосов
/ 18 ноября 2011

Попробуйте это:

SELECT Author_id
FROM books
INNER JOIN Genre USING (Genre)
GROUP BY Author_id
HAVING COUNT(Author_id) >= (SELECT COUNT(*) FROM Genre); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...