2009-11-26 17 views
15

Tengo 3 tablas: personas, grupos y membresías. Membresías es una tabla de unión entre personas y grupos, y tiene 3 columnas: personId, groupId y descripción (texto).orden SQL por una columna de otra tabla

deseo seleccionar entradas de la tabla de miembro en función de una groupId pero clasificar el resultado por los nombres de las personas asociadas a las pertenencias encontradas (nombre es una columna de la tabla de la gente)

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

¿Es posible para lograr esto en una sola consulta?

+0

gracias por tus respuestas! – Florent2

Respuesta

23

Únase a la tabla de personas y ordene por el campo que desee.

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

Algunos servidores de datos SQL insisten en que ordene únicamente los datos seleccionados, en cuyo caso, deberá agregar p.name a los datos seleccionados. –

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

Parece que quiere la información de la tabla de membresías solamente, así que tal vez "SELECCIONE m. * ... como arriba ..."? Luego depende del servidor de datos SQL si puede ordenar por una columna no seleccionada; de lo contrario, los datos devueltos deberán incluir 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 
Cuestiones relacionadas