使用SQL进行多对多查询
EmployeeGroups有许多MedicalPlans。 MedicalPlans有许多EmployeeGroups(多对多关系)。它们连接虽然EmployeeBenefits连接表使用SQL进行多对多查询
EmployeeGroup
:id
:name
MedicalPlan
:id
:name
EmployeeBenefits
:id
:employee_group_id
:medical_plan_id
有谁知道查询我可以用它来获取所有谁有一定MedicalPlan的EmployeeGroups?
我不相信INNER JOIN在这里工作,因为他们没有共同的属性。任何帮助,将不胜感激!
是,内连接工程
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'
啊,从来没有想过双内连接。谢谢!这是完美的 – user3007294
使用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')
);
谢谢Thorsten!以前从未使用过EXISTS或IN(对SQL来说真的很陌生)。欣赏它! – user3007294
不客气。 'EXISTS'和'IN'对于查询可读性非常有用,并且它们将条件放在WHERE子句中。 –
我不入无论是。听起来更像是一个“EXISTS”查询:获取**存在的所有员工组** **某个医疗计划。 –