2009-11-26 3 views
15

Tôi có 3 bảng: người, nhóm và tư cách thành viên. Tư cách thành viên là bảng kết hợp giữa người và nhóm và có 3 cột: personId, groupId và mô tả (văn bản).Thứ tự SQL theo một cột từ một bảng khác

Tôi muốn chọn mục từ bảng thành viên tùy thuộc vào một groupId nhưng sắp xếp kết quả theo tên của người liên quan đến các thành viên tìm thấy (tên là một cột của bảng người)

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

Có thể để đạt được điều này trong một truy vấn đơn lẻ?

+0

nhờ cho bạn câu trả lời! – Florent2

Trả lời

23

Tham gia bảng người và sau đó đặt hàng theo trường bạn muốn.

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

Một số máy chủ dữ liệu SQL nhấn mạnh rằng bạn đặt hàng theo dữ liệu đã chọn - trong trường hợp đó, bạn phải thêm p.name vào dữ liệu đã chọn. –

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

Có vẻ như anh ta muốn thông tin từ bảng thành viên chỉ, vì vậy có thể "SELECT m. * ... như trên ..."? Sau đó, nó phụ thuộc vào máy chủ dữ liệu SQL cho dù bạn có thể đặt hàng bởi một cột không được chọn; nếu không, thì dữ liệu trả về sẽ phải bao gồm 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