2016-08-08 10 views
1

I eine Tabelle haben, Beziehungen, so strukturiert, wieDer beste Weg, um Tabellen mit Beziehungsinformationen zu "glätten"?

Relationships 
------ 
Relationship Employer_ID Employee_ID 
10000  10020  10021 
10001  10019  10020 
10002  10021  10018 

, wo die Beziehung zwischen einem Arbeitgeber und einem Mitarbeiter eindeutig durch die Beziehung Spalte identifiziert wird. Ein Mitarbeiter kann mehrere Arbeitgeber haben, und ein Arbeitgeber kann mehrere Arbeitnehmer haben. Jede Person hat ihre eigene eindeutige ID, die sowohl in den Feldern Arbeitgeber- als auch Mitarbeiter-ID mehrfach vorkommen kann.

und eine andere Tabelle, Review, so strukturiert.

Meetings Review 
------ 
Meeting Attendee_ID 
10000  10020  
10000  10019 
10001  10018 
10001  10021  

Diese Tabelle enthält eine Liste mit Besprechungen und Teilnehmern. Nur zwei Personen können an einer Besprechung teilnehmen - jeder Besprechungsteilnehmer wird für eine Besprechung einmal im Feld Teilnehmer angezeigt. Die IDs im Feld Teilnehmer können mit den IDs im Feld Arbeitgeber/Mitarbeiter in der Tabelle Beziehungen verknüpft werden.

Ich möchte ein Ergebnis wie folgt erhalten - wobei jede Zeile eine eindeutige Besprechung ist und wir die Beziehung zwischen den zwei Besprechungsteilnehmern mithilfe von zwei separaten Spalten (Employer_ID und Employee_ID) identifiziert haben.

Results 
----- 
Meeting Employer_ID Employee_ID 
10000 10019  10020 
10001 10021  10018 

Meine Frage ist - konzeptuell, wie würde ich darüber gehen?

Mein erster Gedanke ist, dass ich maximal und Minimum auf der Attendee_ID verwenden und dann zwei abgeleitete Tabellen erstellen sollte - eine, wo die maximale Teilnehmer-ID (Teilnehmer_1) Übereinstimmungen mit der Arbeitgeber-ID und der minimalen ID (Teilnehmer_2) Übereinstimmungen für die Mitarbeiter-ID. Verwenden Sie dann eine UNION-Abfrage, um diese Ergebnismenge einer anderen abgeleiteten Tabelle hinzuzufügen, in der die maximale Teilnehmer-ID (Teilnehmer_1) mit der Mitarbeiter-ID übereinstimmt und die Mindest-ID (Teilnehmer) 2) mit der Arbeitgeber-ID übereinstimmt.

Dies scheint mir die Ergebnisse zu geben, die ich erwarte, aber gibt es einen besseren Weg, dies zu tun?

+1

Ihre Treffen scheinen immer Treffen von genau einem Mitarbeiter und seinem Arbeitgeber zu sein (deshalb können Sie Arbeitgeber und Mitarbeiter pro Sitzung zeigen). Warum hat Ihr Besprechungstisch nicht einfach einen Datensatz pro Sitzung mit der entsprechenden Beziehungsnummer? –

Antwort

0

Wenn Sie für jede Sitzung nur zwei Element haben denke ich, die beste Lösung, die zweite Alias ​​ist

Meetings Review 
------ 
Meeting Attendee_ID 
10000  10020  
10000  10019 
10001  10018 
10001  10021 

Sie das Ergebnis auf einem einzelnen Reihen auf diese Weise

select a.Meeting , a.Employer_ID b.Employer_ID 
from Review a 
inner join Review b on a.Meeting = b.Meeting and a.Employer_ID != b.Employer_ID 
0

Konzeptionell erhalten können, die Die Beziehung zwischen zwei Teilnehmern wird durch die Datensätze in der Tabelle Relationships bestimmt - ich glaube nicht, dass Sie davon ausgehen können, dass es eine magische Bedeutung hat, ob die IDs größer oder kleiner sind. Ihre Beispieldaten zeigt dies - 10020 ist der Arbeitgeber von 10.021, aber 10021 ist der Arbeitgeber von 10018.

So sind Sie für Datensätze in Meetings Review suchen

wo die meeting Säule ist die gleiche,

und ein Wert entspricht einen Datensatz, in dem die attendee_ID die employer von Relationships ist,

und der andere Wert entspricht einen Datensatz, in dem die attendee_id die employee inist 10,

und beide Datensätze von Relationships haben die gleichen Relationship Wert.

Verwandte Themen