2009-05-18 4 views
3

Ich versuche, einige Daten aus 2 Tabellen zusammenzufügen, aber auf mehreren Spalten. hier ist ein Beispiel:SQL-Abfrage, um mehrere Spalten zu verbinden

Quelle Tabelle

ID | Desc | AAAA | BBBB |

Table2 Tabelle

ID | Text | ID1 | ID2 | ID3 |

wo ID1, ID2 und ID3 in Table2 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) 

I‘ d denke, das wäre ein Join, aber ich kann die Syntax nicht richtig finden ... oder wäre ich mit einer Union besser dran?

Antwort

1

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

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 [email protected] 
+0

Dies ist der eigentliche Fall in meinem Szenario – geocoin

+0

Ich habe Dilemma jetzt zu beantworten :) – geocoin

1

Drei verbindet 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 
6

Sie haben soeben mehrere verwenden könnte beitritt, könnten Sie nicht? 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 
+0

Dies genau der Trick :) – geocoin

+0

zusätzlich: die genauen Ergebnisse zu erhalten, ich brauchte, habe ich linke äußere Verbindungen, aber das ist nur meine spezifische Situation. – geocoin

+0

Entschuldigung, die ausgewählte Antwort zu entreißen, KM's war richtiger für meine Situation ... – geocoin

4

Sie müssen drei Mal an der Quellentabelle teilnehmen, eine für jede ID. Sie können auch versuchen, eine bessere Leistung zu sehen.

Dies ist eine schlechte Tabelle Design (es sollte normalisiert werden) und ich würde vorschlagen, Sie ändern es jetzt, wenn überhaupt möglich. Es gibt eine verwandte Tabelle mit jeder ID in einem separaten Datensatz, dann könnten Sie einmal beitreten, und es wäre viel effizienter und viel einfacher, Code gegen zu schreiben, und Sie müssten die Tabellenstruktur und alle Abfragen nicht an dem Tag ändern, den Sie benötigen ID4.

+0

Ich werde dies berücksichtigen, obwohl keine Option * jetzt * – geocoin