2010-10-15 2 views
0

Je suis sûr que je manque la terminologie correcte, mais pour cet exemple many-to-many:Dans plusieurs à plusieurs, comment les enregistrements détenus collectivement sélectionnés

un utilisateur beaucoup de livres. Un livre appartient à de nombreux utilisateurs.

Quelle est la meilleure façon de voir tous les livres détenus par les deux utilisateurs?

En ce moment, je suis juste en utilisant ceci:

SELECT * FROM books 
WHERE book_id IN 
    (SELECT book_id FROM user_has_book WHERE user_id = 'joe' AND book_id IN 
    (SELECT book_id FROM user_has_book WHERE user_id = 'frank')) 

Je sais que ne peut pas être la meilleure façon de le faire - à droite? J'utilise MySQL

+0

Quel que soit votre chemin, assurez-vous de faire un benchmark sur votre système, et vérifiez le plan d'exécution si possible. – Dlongnecker

Répondre

1
SELECT b.* 
FROM books b 
INNER JOIN 
    (SELECT book_id, COUNT(*) as cnt 
    FROM user_has_book 
    WHERE user_id IN ('Frank', 'Joe')  
    GROUP BY book_id 
    HAVING cnt=2)x ON (x.book_id = b.book_id) 
Questions connexes