2017-10-31 1 views
0

Guten Nachmittag alle -Joins auf One to Many Beziehungen mit 3 Tabellen

Ich habe mit einer SSMS-Abfrage zu kämpfen. (SQL Server 2008)

Ich habe drei Tabellen, die ich beitreten muss. Im Wesentlichen brauche ich Daten aus Tabelle 1 und Tabelle 3, aber muss Tabelle 2 verwenden, um alle zusammen zu verknüpfen.

Tabelle 1: Master-ID, Namen

Tabelle 2: Master-ID, Version ID

Tabelle 3: Version ID, fordert

Im Grunde bin ich versucht zu suchen bei ALLEN REIHEN der Tabelle 3, und den NAMEN der Version aus Tabelle 1 enthalten. Alles, was ich tue, gibt mir eine "mehrteilige Kennung" xxx "konnte nicht gebunden werden."

Ich habe versucht, für diese Art von Joins zu suchen, und ich bin nur so neu dazu - es tut mir leid .... Ich kann den Screenshot von dem nicht einbetten, was ich erreichen will; aber es ließ mich einen Link zu meinem Screenshot setzen. Ich hoffe, dass mir jemand mit dieser Verbindung helfen kann, und dann wird die Glühbirne in meinem Gehirn weitergehen. Vielen Dank im Voraus.

Requested result

+0

Was möchten Sie tun, wenn table3 einen Datensatz hat eine Versionsnummer nicht in table2 enthalten? 1) Fügen Sie den Datensatz ein, aber zeigen Sie einen NULL-Wert für den Namen an? oder 2) den Datensatz ausschließen? – xQbert

Antwort

0

scheint ziemlich geradlinig was ist das Problem?

ANSI 92 verbindet mit inner join und on Syntax. Verwenden von scheinbar Schlüsseln für die Tabellen.

SELECT T1.Name, T3.VersionId, T3.Calls 
FROM Table1 T1 
INNER JOIN table2 T2 
on T1.MasterID = T2.MasterID 
INNER JOIN table3 T3 
on T2.VersionId = T3.VersionID 

T1, T2 und T3 sind Tabellenaliase.

  • Die innere Mittel JOIN wir Aufzeichnungen nur wollen, wenn sie eine right schließt sich stattdessen in beiden Tabellen
  • T1 und T2 verbinden auf MasterID
  • T2 und T3 kommen auf VersionID

Vielleicht existieren von inner, wenn Tabelle 3 Datensätze mit Versionen enthält, die nicht in Tabelle 2 enthalten sind; und Ihre Aussage über ALLE Datensätze aus Tabelle 3 ist wahr. Dann wäre eine rechte Verbindung statt einer inneren erforderlich; aber in diesem Fall hätten einige Datensätze keinen Namen!

+0

Und das hat geholfen! Ich habe nur an einem der Tische gesessen. Die Glühbirne hat geklickt! DANKE. – CLW

+0

OH - und es tut mir leid, das war sehr einfach: Es ist nur, dass ich sehr neu in SQL-Abfragen bin ... Ich schätze es, dass du dich mit meinen dummen Fragen beschäftigst! – CLW

+0

Keine Sorgen. Denken Sie daran, dass jeder Tisch in irgendeiner Weise verbunden werden muss. Manchmal benötigen Sie mehrere Join-Kriterien. In diesem Fall müssen Sie ein UND-Zeichen (oder mehr als ein UND-Zeichen) verwenden, um alle zugehörigen Spalten anzuzeigen. – xQbert

0

Ziemlich einfach:

SELECT T3.VersionId, T3.calls, T1.name 
FROM Table3 T3 
LEFT JOIN TABLE2 T2 ON T3.VERSIONID=T2.VERSIONID 
LEFT JOIN TABLE1 T1 ON T1.MASTERID=T2.MASTERID