Frage

Ich versuche, einige Daten zusammen aus zwei Tabellen zu verknüpfen, sondern auf mehreren Säulen. hier ist ein Beispiel:

  

Quelle Tabelle

     

ID | Desc | AAAA | BBBB |

     

Tabelle 2 Tabelle

     

ID | Text | ID1 | ID2 | ID3 |

Dabei gilt ID1, ID2 und ID3 in Tabelle 2 sind IDs aus der Quelle Tabelle

Ich möchte eine Abfrage tun, die die Ergebnisse ergibt:

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

Ich würde dies erraten eine anschließen würde, aber ich kann die Syntax Recht nicht bekommen ... oder würde ich mit einer Union besser dran?

War es hilfreich?

Lösung

Wenn nicht alle Quellentabellen in der Tabelle 2 aufgefüllt werden, dies wird Ihnen noch Teilergebnisse geben:

SELECT
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
    FROM Table2                t
        LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
        LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
        LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
    WHERE t.ID=@YourIDHere

Andere Tipps

Sie könnten nur verwenden, um mehrere beitritt, könnten Sie nicht? Zum Beispiel:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 tb
    INNER JOIN Source s1 ON tb.ID1 = s1.ID
    INNER JOIN Source s2 ON tb.ID2 = s2.ID
    INNER JOIN Source s3 ON tb.ID3 = s2.ID

Sie müssen die Quelltabelle dreimal verbinden, einen für jede ID. Sie könnten auch einen unuion versuchen, um zu sehen, was zu besseren Ergebnissen führt.

Dies ist ein schlechter Tabellenentwurf (es soll normalisiert werden) und ich würde Sie es vorschlägt, ändert nun, wenn überhaupt möglich. Es shoudl bea verknüpften Tabelle mit jeder ID in einem separaten Datensatz, dann könnten Sie einmal kommen, und es wäre viel effizienter und viel einfacher zu schreiben Code gegen und Sie würden nicht die Tabellenstruktur ändern müssen und allthe fragt den Tag, den Sie brauchen ID4.

Drei verbinden sollte es tun:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
from Source A
inner join Table2 B1 on B1.ID1=A.ID
inner join Table2 B2 on B2.ID2=A.ID
inner join Table2 B3 on B3.ID3=A.ID
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top