2016-04-02 7 views
0

Mitarbeitergruppen haben viele MedicalPlans. MedicalPlans haben viele Mitarbeitergruppen (Viele-zu-Viele-Beziehung). Sie verbunden sind, wenn die EmployeeBenefits Tisch beitretenMany-to-Many Abfrage mit SQL

EmployeeGroup 
:id 
:name 

MedicalPlan 
:id 
:name 

EmployeeBenefits 
:id 
:employee_group_id 
:medical_plan_id 

Kennt jemand eine Abfrage, die ich verwenden können alle EmployeeGroups abzurufen, die eine bestimmte MedicalPlan haben?

Ich glaube nicht, INNER JOIN funktioniert hier, weil sie kein Attribut gemeinsam haben. Jede Hilfe wäre willkommen!

+1

Ich würde auch nicht mitmachen. Hört sich eher nach einer EXISTS-Abfrage an: Bekommen Sie alle Mitarbeitergruppen, für die ** ein bestimmter medizinischer Plan existiert. –

Antwort

3

Ja, innere Verknüpfung Werke

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

Ahhh, dachte nie an die doppelte innere Verbindung. Vielen Dank! Das ist perfekt – user3007294

2

Verwenden EXISTS oder IN für solche Aufgaben:

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

Danke Thorsten! Niemals EXISTS oder IN benutzt (wirklich neu in SQL). Bin dankbar! – user3007294

+0

Gern geschehen. 'EXISTS' und' IN' sind sehr nützlich, um Abfragen lesbar zu machen, und sie legen Kriterien fest, wo sie hingehören: in der WHERE-Klausel. –