2016-04-02 15 views
0

EmployeeGroupsには、多くのMedicalPlansがあります。 MedicalPlansには、多くのEmployeeGroups(多対多関係)があります。 EmployeeBenefitsが参加しても彼らは接続されているテーブルSQLを使用した多対多クエリ

EmployeeGroup 
:id 
:name 

MedicalPlan 
:id 
:name 

EmployeeBenefits 
:id 
:employee_group_id 
:medical_plan_id 

誰もが、私は特定のMedicalPlanを持っているすべてのEmployeeGroupsを取得するために使用することができますクエリを知っていますか?

私はINNER JOINが共通の貢献をしていないため、ここで働いているとは思いません。どんな助けもありがとう!

+1

私はどちらか参加しないでしょう。 'EXISTS'クエリのように聞こえる:**存在する**すべての従業員グループを一定の医療計画にまとめる。 –

答えて

3

はい、インナーには、このようなタスクのため

select eg.name 
from EmployeeGroup eg 
join EmployeeBenefits eb on eb.employee_group_id = eg.id 
join MedicalPlan mp on eb.medical_plan_id = mp.id 
where mp.name = 'my plan' 
+0

ああ、ダブルインナージョイントは考えなかった。ありがとう!これは完璧です – user3007294

2

使用EXISTSまたはIN作品に参加:

select * 
from employeegroup 
where id in 
(
    select employee_group_id 
    from employeebenefits 
    where medical_plan_id = (select id from medicalplan where name = 'XYZ') 
); 
+0

ありがとうThorsten!以前はEXISTSやINを使用していませんでした(本当にSQLの初心者です)。感謝します! – user3007294

+0

ようこそ。 'EXISTS'と' IN'は、クエリを読みやすくするために非常に便利で、WHERE句の中に条件を置くことができます。 –

関連する問題