2014-05-01 3 views
0

J'essaye de relier des valeurs de 3 tables liées à une. j'ai 3 tables:3 tables liées à une

tableau: U

╔════╦══════════════╦ 
║uid ║ name  ║ 
╠════╬══════════════╣ 
║ 1 ║ admin  ║ 
║ 92 ║  a  ║ 
╚════╩══════════════╝ 

tableau: N

╔════╦══════════════╦ 
║uid ║  nid  ║ 
╠════╬══════════════╣ 
║ 1 ║  152  ║ 
║ 92 ║  153  ║ 
╚════╩══════════════╝ 

tableau: R

╔════╦══════════════╦ 
║ id ║ user_id ║ 
╠════╬══════════════╣ 
║152 ║  92  ║ 
║153 ║  1  ║ 
╚════╩══════════════╝ 

Je souhaite afficher

╔════╦══════════════╦════════╗ 
║ id ║  name1 ║ name2 ║ 
╠════╬══════════════╬════════╣ 
║152 ║  admin ║ a ║ 
║153 ║  a  ║ admin ║ 
╚════╩══════════════╩════════╝ 

J'ai essayé cette requête SQL

SELECT nid id, name name1, user_uid name2 
FROM u u, n n, r r 
WHERE u.uid = n.uid 
AND n.nid = r.id 

Mais il revenir dans le tableau NOM2 que des valeurs telles que 1,92. Comment changer ceux admin, un

+0

Les tableaux 'R' et' N' semblent être des copies les uns des autres avec des noms de colonne différents. Peut-être que l'amélioration de votre nom pourrait rendre les choses plus claires. – Richard

+0

quelle est la relation entre les tables? – Nazgul

+0

Les tableaux N et R sont différents. Est-il possible de connecter tout le monde pour avoir le résultat que j'ai décrit? – user3582116

Répondre

4

Si je comprends bien votre question, la colonne user_id dans le tableau R fait référence à la colonne uid dans le tableau U.

Si oui, vous avez besoin d'une deuxième référence au tableau U pour fournir name2. Je l'écris comme ceci:

select n.nid, u1.name as name1, u2.name as name2 
from u u1 
    inner join n on u1.uid = n.uid 
    inner join r on n.nid = r.id 
    inner join u u2 on r.user_id = u2.uid 

J'ai utilisé le tableau U deux fois - une fois pour fournir nom1 et une deuxième fois pour fournir nom2.

+1

Ceci est en fait un SQL standard ANSI, cela devrait fonctionner sur _any_ RDBMS. –

+0

Merci. J'ai modifié pour supprimer la mise en garde. – aucuparia

Questions connexes