2016-07-05 28 views
0

私はStudentsテーブルとLanguageテーブルを持っています。ピボットテーブルLanguages_Studentを使用して多対多リレーションシップを形成します。多対多関係のCount()

他の生徒と共通の言語を使用する生徒を得る方法はありますか?

私はCOUNT()と何らかの選択をどのように組み合わせるべきかについてはあまりよく分かりません。これは私が今で働いているものです:

select * from students student1 
inner join languages_student ls1 
    on student1.id = ls1.student_id 
inner join languages l1 
    on l1.id = ls1.language_id 
inner join languages_student ls2 
    on l1.id = ls2.language_id 
inner join students student2 
    on ls2.student_id = student2.id 
where student1.id = 65 
group by 16 

私はすべてのアイデアID 65

と学生と共通の言語の最大の量で学生を取得しようとしていますか?

答えて

0

自己結合を使用してこれを行うことができます。 の言語カラムのジャンクションテーブルに参加してください。その後、学生列による凝集体は共通して数を取得します

select ls.student_id, count(*) as NumInCommon 
from languages_student ls join 
    languages_student ls65 
    on ls.language = ls65.language and ls65.student_id = 65 and 
     ls65.student_id <> ls.student_id 
group by ls.student_id 
order by count(*) desc; 
+0

はい!ありがとうございました! –

0
 select ls.student_id, count(ls.language_id) as common 
     from languages_student ls 
     where ls.id in (  
       select l.id 
       from students s 
       inner join languages_student ls 
       on s.id = ls.student_id 
       inner join languages l 
       on l.id = ls.language_id 
       where s.id = 65) 
     order by count(ls.language_id)