2009-11-26 8 views
15

J'ai 3 tables: personnes, groupes et appartenances. Memberships est une table de jointure entre des personnes et des groupes et comporte 3 colonnes: personId, groupId et description (texte).Ordre SQL par colonne d'une autre table

Je veux sélectionner des entrées de la table des adhésions en fonction d'un groupId mais trier le résultat par les noms des personnes associées aux adhésions trouvées (nom est une colonne de table personnes)

SELECT * FROM "memberships" WHERE ("memberships".groupId = 32) ORDER BY (?????) 

Est-il possible pour y parvenir en une seule requête?

+0

Merci pour les réponses des vôtres! – Florent2

Répondre

23

Inscrivez-vous à la table des personnes, puis passez votre commande en fonction du champ que vous souhaitez.

SELECT 
    m.* 
FROM 
    "memberships" AS m 
    JOIN "people" AS p on p.personid = m.personID 
WHERE 
    m.groupId = 32 
ORDER BY 
    p.name 
+6

Certains serveurs de données SQL insistent pour que vous ne commandiez que des données sélectionnées. Dans ce cas, vous devez ajouter p.name aux données sélectionnées. –

3
SELECT * 
FROM Membership AS m 
    JOIN People as p ON p.personID = m.personID 
WHERE m.groupID = 32 
ORDER BY p.name 
+0

Il semble qu'il veut seulement les informations de la table d'appartenances, alors peut-être "SELECT m. * ... comme ci-dessus ..."? Ensuite, cela dépend du serveur de données SQL si vous pouvez commander par une colonne non sélectionnée; sinon, les données renvoyées devront inclure p.name. –

1
SELECT 
     M.* , 
     P.Name AS PersonName 
FROM 
     Memberships AS m 
INNER JOIN 
     People AS P ON P.PersonID = M.PersonID 
WHERE 
     M.GroupID = 32 
ORDER BY 
     PersonName 
Questions connexes