Привет
Вроде простая задача, но 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;
|