2017-01-11 5 views
0

Ich habe ein seltsames Szenario mit 4 Tabellen mit vielen zu vielen Beziehung. Nachfolgend finden Sie die Tabellen, die ich habe:MSSQL-Abfrage für viele-zu-viele-Beziehung

Employee 
-------- 
EmpId (Pk) 
Name 

Dept 
-------- 
DeptId (Pk) 
Name 

EmpDept 
--------- 
EmpId (pk) 
DeptId (pk) 

Diese vielen Tabelle 1 Mitarbeiter auf eine viele ist

auf mehr als 1 dept angehören
Project 
--------- 
ProjId (Pk) 
EmpId (pk) 

Dies ist auch viele, viele, wo ein Mitarbeiter eines Teils sein kann mehr als 1 Projekt unabhängig von der Abteilung

Es gibt keine Zuordnung zwischen Abteilung und Projekt.

Ich brauche Details von allen Projekten, zu denen ein Mitarbeiter gehört, aus allen Abteilungen, die nach Abteilungen gruppiert sind. Ich bin total verloren, die Abfrage zu schreiben. Alles, was ich schreiben könnte, ist

select * 
from Project 
where empId in (select empid from EmpDept) 

Was mir fehlt deptID, wie kann ich das ein?

Example data shown here

+0

Sie können DeptId mit EmpId in EmpDept Tabelle Tabelle von Join gehen Bedingung –

+5

Bitte geben Sie Datensatz und gewünschte Ergebnismenge –

+0

Werfen Sie einen Blick auf [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http: // stackoverflow .com/help/mcve) und versuchen Sie, ein mcve in Ihre Frage aufzunehmen - das bedeutet, dass Sie viel bessere Antworten erhalten. – 3N1GM4

Antwort

0

können Sie den folgenden Code

Select P.Name,D.name,E.name from Project P 
join EmpDept Ep 
on P.EmpId=Ep.EmpId 
join Dept d 
on d.DeptId=p.EmpId 
group by d.name,P.Name,E.Name 

einfach die Spalten in der Gruppe und Auswahlliste hinzufügen, die Sie in der Auswahlliste möchten.

+0

Sieht aus wie ein Tippfehler in Ihrem Join: 'auf P.EmpId = P.EmpId' sollte' auf Ep.EmpId = P.EmpId', rechts sein ? – 3N1GM4

+2

Warum 'GROUP BY' wenn keine Aggregatfunktionen beteiligt sind? – jarlh

+0

Recht Ich muss die Antwort bearbeiten –

Verwandte Themen