Вроде простая задача, но mysql знаю плохо поэтому прошу проверить.
БД это таблица авторов, ими написаных книг и отношение соответственно один к многим.
Задача - вытащить список книг, которые написаны 3-мя со-авторами. То есть получить отчет «книга — количество соавторов» и отфильтровать те, у которых со-авторов меньше 3х.
мой вариант такой, насколько правильно и можно ли улучшить ?
CODE (SQL):
скопировать код в буфер обмена
скопировать код в буфер обмена
- CREATE TABLE author (
- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- NAME VARCHAR(255) NOT NULL);
- CREATE TABLE book (
- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- NAME VARCHAR(255) NOT NULL);
- CREATE TABLE author_book (
- id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- author_id INT NOT NULL,
- book_id INT NOT NULL);
- SELECT * FROM book b INNER JOIN author_book ab ON b.id = ab.`book_id`
- INNER JOIN author a ON a.id = ab.`author_id`
- GROUP BY b.`name`
- HAVING COUNT(*) = 3;