2009-11-26 2 views
15

私は3つのテーブルを持っています:人、グループ、メンバーシップです。メンバーシップは、人とグループの間の結合テーブルで、3つのカラム、personId、groupId、description(text)を持ちます。他のテーブルの列によるSQLの注文

は私が

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

ことが可能です(名前が人々のテーブルの列です)のgroupIdに応じたが、見つかったメンバーシップに関連付けられている人の名前で結果をソートするメンバーシップテーブルからエントリを選択します1つのクエリでこれを達成するには?

+0

感謝! – Florent2

答えて

23

人物テーブルに参加し、必要なフィールドで注文します。あなたの答えを

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

一部のSQLデータサーバーでは、選択したデータのみで注文すると主張しています。その場合は、選択したデータにp.nameを追加する必要があります。 –

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

彼はメンバーシップテーブルの情報だけを望んでいるようだから、 "SELECT m。* ... as above ..."?次に、選択されていない列で注文できるかどうかは、SQLデータサーバーによって異なります。そうでない場合、返されるデータには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 
関連する問題