Даны две таблицы со столбцами
AUTHORS
-AUTHOR_ID (PK)
-AUTHOR_NAME
BOOKS
-BOOK_ID (PK)
-AUTHOR_ID (FK)
-BOOK_NAME
Задача: Выбрать имена всех авторов, у которых более 10 книг.
Заранее спасибо. PS Буду благодарен за ссылку на объяснение джойнов для самых тупых (все, что нашел сам, не помогло понять)
-- выбрать имена авторов
SELECT a.author_name
-- из таблиц авторов и книг
FROM authors a, books b
-- где идентификатор автора совпадает с идентификатором автора книги
WHERE a.author_id = b.author_id
-- причём для данного автора
GROUP BY a.author_name
-- количество (уникальных) идентификаторов книг больше 10
HAVING COUNT( /* DISTINCT */ b.book_id) > 10
Если непременно нужен JOIN, то
-- выбрать имена авторов
SELECT a.author_name
-- из таблиц авторов и книг
FROM authors a INNER JOIN books b
-- где идентификатор автора совпадает с идентификатором автора книги
ON a.author_id = b.author_id
-- причём для данного автора
GROUP BY a.author_name
-- количество (уникальных) идентификаторов книг больше 10
HAVING COUNT( /* DISTINCT */ b.book_id) > 10
Сам запрос:
SELECT AUTHORS.AUTHOR_NAME FROM AUTHORS
INNER JOIN (
SELECT AUTHORS.AUTHOR_ID AS AID, COUNT(*) AS BOOKCOUNT FROM
AUTHORS INNER JOIN BOOKS ON AUTHORS.AUTHOR_ID = BOOKS.AUTHOR_ID
GROUP BY AUTHORS.AUTHOR_ID
) ON AUTHORS.AUTHOR_ID = AID WHERE BOOKCOUNT > 10;
Применяемый здесь INNER JOIN работает так: он формирует из двух таблиц одну, кортежи которой "слеплены" из атрибутов обоих таблиц, однако для "слепки" выбираются лишь те кортежи, для которых выполняется условие после ON.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости