SQL намиране на най-популярните книги

Имам маса Книги

BookID BookName
 1       BookA
 2       BookB
 3       BookC

Членска маса

MemberID MemberName
 1          MemberA
 2          MemberB

Таблица за заем

MemberID BookID
 1         1
 1         2
 2         1
 2         2

Искам да намеря пет популярни книги от Memeber A

Опитах следното запитване

SELECT        TOP (5) Book.BookTitle, COUNT(*) AS Count, Member_1.MemberName
FROM            Book INNER JOIN
                         Borrow ON Book.BookID = Borrow.BookID INNER JOIN
                         Member ON Borrow.MemberID = Member.MemberID INNER JOIN
                         Member AS Member_1 ON Borrow.MemberID = Member_1.MemberID
                         where Member.MemberName='A'
GROUP BY Book.BookTitle, Member_1.MemberName
ORDER BY Count DESC

Но това не ми дава действителния резултат.

Всяко предложение ще бъде оценено.


person Owais Ahmed    schedule 19.09.2020    source източник
comment
Маркирахте вашия въпрос MySQL, но кодът не се изпълнява в MySQL. Объркан съм.   -  person Gordon Linoff    schedule 19.09.2020
comment
С какво резултатът се различава от това, което очаквате? И защо се присъединявате към заемащия член два пъти? И как наричате популярна книга от член? Искате да кажете, че те заемат една и съща книга повече от веднъж и вие класирате книгите според това колко често членът ги е заемал?   -  person Thorsten Kettner    schedule 19.09.2020


Отговори (1)


Мисля, че имате твърде много присъединявания:

SELECT TOP (5) b.BookTitle, COUNT(*) AS Count, m.MemberName
FROM Book b INNER JOIN
     Borrow bo
     ON bo.BookID = b.BookID INNER JOIN
     Member m
     ON bo.MemberID = m.MemberID 
WHERE m.MemberName = 'A'
GROUP BY b.BookTitle, m.MemberName
ORDER BY Count DESC;

Забележка: Този синтаксис обикновено се свързва с SQL Server и не работи в MySQL. В MySQL бихте използвали LIMIT 5, а не SELECT TOP (5).

person Gordon Linoff    schedule 19.09.2020