2016-04-02 131 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子句中。 –