2010-09-28 4 views
0

J'utilise MySQL. J'ai 3 tables que j'essaye de se relier dans une question et je ne peux pas voir ce que je fais mal avec la requête suivante:Quel est le problème avec ma requête sql en utilisant les jointures à gauche?

Tableau 1: livres (liste d'informations de livre) Tableau 2: étagère (Je veux générer une liste de tous les livres qu'un utilisateur a dans sa bibliothèque, ainsi que toutes les critiques qu'ils ont faites. La requête suivante me donne une liste seulement des livres que l'utilisateur a examinés; Je veux tous leurs livres. Je pensais que le second LEFT OUTER JOIN le ferait - reliant les titres des étagères aux titres des critiques de livres, mais je n'obtiens aucun livre sans avis (il devrait y en avoir beaucoup). La suppression de la deuxième instruction JOIN (et la mise en place de la bibliothèque dans l'instruction FROM) me permet d'obtenir une liste de titres sans avis, mais elle affiche toutes les critiques de livres de tous les utilisateurs.

SELECT books.title, book_reviews.comments 
FROM books 
LEFT OUTER JOIN book_reviews ON books.ID = book_reviews.book_id 
LEFT OUTER JOIN bookshelf ON book_reviews.user_id = bookshelf.user_id 
WHERE bookshelf.book_id = books.ID 
AND bookshelf.user_id =1 

j'imagine que je manque quelque chose de très évident, mais j'ai lu sur les jointures et d'aller sur ma logique et je suis aveugle à elle. Merci à tous ceux qui peuvent aider à voir ...

+0

Peuvent-ils examiner les livres qui ne sont pas sur leur étagère? –

+0

Oui, ils peuvent, mais pour cette situation, je cherche seulement des articles de leur bibliothèque. Le site est centré sur les livres. – mandel

Répondre

1

Essayez ceci:

SELECT books.title, book_reviews.comments 
FROM bookshelf 
LEFT OUTER JOIN books ON books.ID = bookshelf.book_id 
LEFT OUTER JOIN book_reviews ON book_reviews.book_id = books.ID 
AND book_reviews.user_id = bookshelf.user_id 

WHERE bookshelf.user_id =1 
+0

C'est tout. Je présume qu'en commençant par des livres plutôt que des étagères, je devais me concentrer sur la mauvaise chose. – mandel

Questions connexes