2016-04-02 16 views
0

Çalışanların çoğunda birçok MedicalPlans vardır. MedicalPlans'ın birçok Çalışan Grubu vardır (çoktan çoğa ilişki). EmployeeBenefits katılmak gerçi onlar bağlanır tabloÇoktan çoğa sorgu kullanılarak SQL

EmployeeGroup 
:id 
:name 

MedicalPlan 
:id 
:name 

EmployeeBenefits 
:id 
:employee_group_id 
:medical_plan_id 

Herkes ben belli MedicalPlan olan tüm EmployeeGroups almak için kullanabileceğiniz bir sorgu biliyor mu?

INNER JOIN'in ortak bir özelliği olmadığı için burada çalıştığına inanmıyorum. Herhangi bir yardım takdir edilecektir!

+1

Ben de katılmak olmaz. “EXISTS” sorgusuna daha çok benzetir: ** var olan ** belirli bir sağlık planı olan tüm çalışan gruplarını edinin. –

cevap

3

Evet, iç tür görevler için çalışmalarını

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, çift iç birleştirmeyi hiç düşünmemiştim. Teşekkürler! Bu mükemmel – user3007294

2

kullanın EXISTS veya IN katılmak:

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

Teşekkürler Thorsten! Daha önce hiç EXISTS veya IN kullanmadınız (SQL'e gerçekten yeni). Takdir ederim! – user3007294

+0

Bir şey değil. EXISTS ve 'IN' sorguları okunabilir hale getirmek için çok faydalıdır ve WHERE maddesinde olduğu yere ait kriterleri koymaktadırlar. –