Я строю библиотечную базу данных.
Я хочу написать запрос, который возвращает доступные книги в библиотеке (их имена, названия, имена авторов, имя публикации, имя категории и количество доступных копий.
Мой запрос включает следующие отношения (жирным шрифтом обозначены первичные ключи):
Книга (ISBN , название, pubYear, номера, pubName ) pubName FK для издателя
копий (ISBN, copyNr , полка ) ISBN FK для бронирования
заимствует (memberID, ISBN, copyNr, date_of_borrowing , date_of_return ) memberID FK для участника, ISBN FK для Книги, (ISBN, copyNr) FK для копирования
принадлежит_ (ISBN, categoryName) SBN FK для книги, categoryName FK для категории
writ_by (ISBN, authID) ISBN FK для книги, authID FK для автора
автор (authID , AFirst, ALast, Abirthdate )
Мой подход следующий:
SELECT b.isbn, b.title,a.ALast, a.ALast, b.pubName, be.categoryName , COUNT(b.isbn) as Number_of_copies_available
FROM copies as c
INNER JOIN book as b ON c.isbn = b.isbn
INNER JOIN belong_to as be ON b.isbn = be.isbn
INNER JOIN written_by as w ON w.isbn=b.isbn
INNER JOIN author as a ON a.authID = w.authID
WHERE (c.isbn,c.copyNr) NOT IN (SELECT isbn, copyNr FROM borrows)
GROUP BY b.isbn
ORDER BY be.categoryName
Проблема в том, что я получаю повторяющиеся кортежи в результате перед группировкой, что приводит к увеличению количества элементов в группе.
Например, для некоторых книг я получаю значение атрибута Number_of_copies_available вдвое больше, чем ожидалось.
Если я не JOIN
с отношениями "wrote_by" и "автор", тогда результат верен. Тем не менее, я также хочу, чтобы имена авторов в результате. В чем моя ошибка? Заранее спасибо!