2016-04-02 130 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

使用EXISTSIN這樣的任務:

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子句中。 –