2009-11-26 18 views
15

Ich habe 3 Tabellen: Menschen, Gruppen und Mitgliedschaften. Mitgliedschaften ist eine Join-Tabelle zwischen Personen und Gruppen und hat 3 Spalten: personId, groupId und Beschreibung (Text).SQL-Reihenfolge nach einer Spalte aus einer anderen Tabelle

Ich möchte von der Mitgliedschaften Tabelleneinträge auszuwählen in Abhängigkeit von einem groupId aber das Ergebnis durch die Namen der Menschen verbunden zu den gefundenen Mitgliedschaften (Name-Tabelle ist eine Spalte von Personen) Sortierung

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

Ist es möglich, um dies in einer einzigen Abfrage zu erreichen?

+0

Dank für deine Antworten! – Florent2

Antwort

23

Verbinden Sie sich mit der People-Tabelle und bestellen Sie dann nach dem gewünschten Feld.

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

Einige SQL-Datenserver bestehen darauf, dass Sie nur nach ausgewählten Daten bestellen. In diesem Fall müssten Sie p.name zu den ausgewählten Daten hinzufügen. –

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

Es scheint, er will die Informationen nur aus der Mitgliedschafts-Tabelle, also vielleicht "SELECT m. * ... wie oben ..."? Dann hängt es vom SQL-Datenserver ab, ob Sie nach einer nicht ausgewählten Spalte sortieren können; Wenn nicht, müssen die zurückgegebenen Daten p.name enthalten. –

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 
Verwandte Themen