SQL recherche les livres les plus populaires

J'ai une table Livres

BookID BookName
 1       BookA
 2       BookB
 3       BookC

Tableau des membres

MemberID MemberName
 1          MemberA
 2          MemberB

Tableau d'emprunt

MemberID BookID
 1         1
 1         2
 2         1
 2         2

Je veux découvrir cinq livres populaires de Memeber A

J'ai essayé la requête suivante

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

Mais cela ne me donne pas le résultat réel.

Toute suggestion serait appréciée.


person Owais Ahmed    schedule 19.09.2020    source source
comment
Vous avez tagué votre question MySQL, mais le code ne s'exécutera pas dans MySQL. Je suis confus.   -  person Gordon Linoff    schedule 19.09.2020
comment
En quoi le résultat est-il différent de ce que vous attendez ? Et pourquoi rejoignez-vous deux fois le membre emprunteur ? Et comment appelle-t-on le livre populaire d’un membre ? Vous voulez dire qu'ils empruntent le même livre plus d'une fois et que vous classez les livres selon la fréquence à laquelle le membre les a empruntés ?   -  person Thorsten Kettner    schedule 19.09.2020


Réponses (1)


Je pense que vous avez trop de jointures :

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;

Remarque : Cette syntaxe est généralement associée à SQL Server et ne fonctionne pas dans MySQL. Dans MySQL, vous utiliseriez LIMIT 5 plutôt que SELECT TOP (5).

person Gordon Linoff    schedule 19.09.2020