2013-06-14 6 views
0

J'ai trois tables: Demandes, utilisateurs et demandes d'utilisateurs.Plusieurs à plusieurs requêtes SQL

Demandes: - ID - Submit_ID - Assign_ID - Completed_ID

utilisateur: - ID - UserName

UserRequest: - ID - REQUEST_ID - user_id

Chaque demande a un utilisateur différent de celui que la demande a été soumise par, assignée à et complété par. J'essaie pour la sortie suivante:

Request.ID | Nom d'utilisateur de Assigned | Nom d'utilisateur de Soumis | Nom d'utilisateur de Terminé

Est-ce que je vais dans ce sens?

+0

Pouvez-vous montrer la requête que vous avez essayé jusqu'à présent? – Sparky

Répondre

1

ne comprenait pas le but de UserRequest, mais votre sortie destinée est obtenue comme suit:

SELECT 
    r.ID, 
    us.UserName, 
    ua.UserName, 
    uc.UserName 
FROM 
    Requests r 
    JOIN Users us 
    ON r.Submit_ID = us.ID 
    JOIN Users ua 
    ON r.Assign_ID = ua.ID 
    JOIN Users uc 
    ON r.Complete_ID = uc.ID 
+0

Merci. Je suis un peu un SQL newb. Je pensais que les demandes et les utilisateurs avaient une relation de plusieurs à plusieurs. Comme d'habitude, j'étais trop penser à la solution. Merci beaucoup! – user2486993

1

Vous pouvez faire ce que vous demandez (plusieurs one-to-many joint) en donnant la table utilisateur un alias différent pour chaque jointure comme suit:

SELECT 
    Requests.ID AS `Request.ID`, 
    AssignUser.UserName AS `Username of Assigned`, 
    SubmitUser.UserName AS `Username of Submitted`, 
    CompleteUser.UserName AS `Username of Completed` 
FROM 
    Requests 
JOIN User AS AssignUser ON 
    Requests.Assign_ID = AssignUser.ID 
JOIN User AS SubmitUser ON 
    Requests.Submit_ID = SubmitUser.ID 
JOIN User AS CompleteUser ON 
    Requests.Completed_ID = CompleteUser.ID 

Notez que les tiques arrière sont utilisés ci-dessus pour spécifier les alias de colonne. Si vous n'utilisez pas MySQL, vous devrez probablement utiliser des guillemets doubles pour Oracle (ou un caractère différent si vous utilisez un type de base de données différent).