2010-10-09 4 views
4

Si j'ai deux tables commeComment les jointures devraient-elles être utilisées dans mysql?

utilisateur table- "u"

userid | name 
1  | lenova 
2  | acer 
3  | hp 

passe table- "p"

userid | password 
1  | len123 
2  | acer123 
3  | hp123 

que pour que j'appris de tutoriels que je peux joindre ces 2 tables à l'aide de jointures disponibles dans mysql comme dit here

Si j'ai une table comme

rôle table- "r"

roleid | rname 
1  | admin 
2  | user 
3  | dataanalyst 

table- jeton "t"

tokenid| tname 
1  | xxxx 
2  | yyyy 
3  | zzzz 

tole_token_association table- "a"

roleid | tokenid 
1  | 1 
1  | 2 
3  | 1 
3  | 3 
3  | 1 

Je dois faire adhérer à ces que je dois afficher une table qui correspond comme ça "rolename" a tous ces jetons. Comment faire ça? Je suis confus. Est-il possible de faire une jointure? J'aime beaucoup mysql. Je souhaite jouer avec des requêtes telles que ne pas jouer. Je veux être bien versé. Des suggestions s'il vous plaît?

Répondre

1

Il est plus facile de voir quand les noms de colonnes qui doivent être joints sont nommés de manière identique:

SELECT r.rname, 
     t.tname 
    FROM ROLE r 
    JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid 
    JOIN TOKEN t ON t.tokenid = rta.tokenid 

Ceci renvoie les rôles avec des jetons associés. Si vous avez un rôle qui ne dispose pas d'un jeton associé, vous devez utiliser une jointure externe, comme celui-ci:

SELECT r.rname, 
      t.tname 
    FROM ROLE r 
LEFT JOIN ROLE_TOKEN_ASSOCIATION rta ON rta.roleid = r.roleid 
    JOIN TOKEN t ON t.tokenid = rta.tokenid 

Ce link might help -- it's a visual representation of JOINs.

+0

Si les noms sont identiques, vous pouvez utiliser NATURAL JOIN sans la clause ON – MatTheCat

+1

@MatTheCat: Vous pouvez, mais toutes les bases de données ne supportent pas la syntaxe NATURAL JOIN, et je préfère être explicite sur mes critères de jointure. En partie parce que c'est ce que demande le PO - comment/quelles colonnes doivent être ajoutées. Ne vous aidez pas si vous cachez cette information à quelqu'un ... –

+0

Ok, je viens de le remarquer parce que c'était MySQL. J'aime sauver beaucoup de caractères quand mes requêtes deviennent plus longues ^^ – MatTheCat

Questions connexes