2009-07-05 7 views
0

J'essaye de savoir quoi faire ici. Regardez ces tableaux:Comment est-ce que je ferais une jointure de trois tables avec le serveur de sql?

utilisateurs

id, nom d'utilisateur, mot de passe

livres

id

, titre

users_books

bookID, userID

Comment les joindre ensemble? Si je voulais par exemple voir les livres de l'utilisateur 47?

+0

Devoirs? Qu'avez-vous essayé? –

+0

Salut, Tommy. Cela ressemble à une question de devoirs. C'est bon, mais pourriez-vous dire ce que vous avez essayé, et quels problèmes avez-vous eu? On dirait vraiment que vous essayez d'amener quelqu'un à tout faire pour vous, ce que certaines personnes n'aiment pas. Ils aiment penser que vous avez essayé en premier. –

+0

Il a également une ligne d'objet assez non spécifique. Il y a probablement plusieurs milliers de questions sur SO en ce moment qui correspondent à cette même ligne d'objet! Ce serait beaucoup mieux si vous disiez "comment je ferais une jointure de trois tables avec sql server". –

Répondre

1

Si vous utilisez SQL Server, cette requête devrait fonctionner.

select books.title 

from books, users_books 

where books.id = users_books.bookID and users_books.id = 47 
+0

Oh, eh bien. J'espère que ce n'était pas un devoir, ou quelqu'un devra l'aider demain aussi. –

+0

Mon opinion est que les gens qui posent des questions à la maison sans les étiqueter de devoirs devraient juste avoir la réponse. Je n'ai aucun scrupule à leur donner des réponses directes car cela a l'avantage de rendre plus difficile pour eux de me mettre au chômage plus tard (puisqu'ils sont invariablement stupides).:-) – paxdiablo

+0

Je dirais que vous auriez pu attendre assez longtemps pour qu'il décide de répondre. BTW, à mon humble avis, il y a tout autant de risque de vous mettre au chômage. Le problème est que, une fois qu'il a pris le travail de quelqu'un d'autre, il ne sera pas capable de le faire, parce que nous lui avons permis de s'en sortir sans rien apprendre. Je vois beaucoup de questions ici (mais plus ailleurs) par des gens qui ne devraient vraiment pas faire ces travaux (c'est la version polie). –

0
select b.title from users_books ub 
    join books b on b.id = ub.bookID 
    where ub.userID = 47 
+0

Joel, je ne vois pas comment c'est différent de la réponse de m-sharp. –

+2

Il n'utilise pas de jointures implicites, par exemple. –

+0

"from books, users_books" est une jointure, avec une syntaxe différente. –

2

Eh bien, si elle est un devoir alors au lieu de donner poisson tous les jours, enseigner comment pêcher serait plus utile.

J'espère que les références suivantes favoriseraient dans SQL compréhension joins-

http://www.sql-tutorial.net/SQL-JOIN.asp

http://www.tizag.com/sqlTutorial/sqljoin.php

En ce qui concerne votre requête de jointure concerne, la réponse donnée par « m-forte » devrait vous donner la bonne réponse.

acclamations

+0

Andriyev: Merci pour les leçons de pêche! Le manque de leçons est ce que je voulais dire. –

+0

Oui John. Je suis d'accord avec vos commentaires :-) – Arnkrishn

0

Aucun des autres réponses se joignent trois tables (votre question, mais trois états tête de votre corps a besoin de seulement deux), je vais vous donner une version trois table.

Pour ce faire, je suppose que vous avez le nom d'utilisateur de l'utilisateur plutôt que l'ID. Dans ce cas, vous pouvez faire:

select 
    u.id as user_id, 
    u.username as user_name, 
    b.id as book_id, 
    b.title as book_title 
from 
    users u, 
    books b. 
    user_books ub 
where u.username = 'username-of-user-47' 
and u.id = ub.userID 
and b.id = ub.bookID 

Ce genre de chose peut être fait avec explicites JOIN s mais je préfère les voies SQL « vieille école », en particulier lorsque le SGBD est assez intelligent pour optimiser dans le même manière, comme mon bien-aimé DB2/z :-)

Questions connexes