2017-10-04 2 views
1

Mit SQL Server 2016, ich kann nicht scheinen, dies herauszufinden. Ich habe zwei Tabellen, TableA und TableB:SQL Server Join alle Datensätze ohne Dups

TableA 
Item| Value | ValueID 
-------------------------- 
1 | AAA  | 1 
1 | BBB  | 2 


TableB 
Item| Value | ValueID 
-------------------------- 
1 | XXX  | 1 
1 | YYY  | 2 
1 | ZZZ  | 3 


What I want to output is: 

Item | ValueA | ValueIDA | ValueB | ValueIDB 
-------------------------------------------------- 
1 | AAA  | 1  | XXX | 1 
1 | BBB  | 2  | YYY | 2 
1 | [NULL] | [NULL] | ZZZ | 3 

Ich habe versucht, jede Kombination von JOIN ich denken kann, aber ich bin nicht in der Lage, dieses Ergebnis zu erhalten.

Vielen Dank im Voraus -MH

+0

Sie TableA rechts TableB auf ValueID beitreten tun können – Rams

+0

Ich glaube, Sie wollen eine vollständige äußere Verknüpfung mit Aliasnamen auf Wert ID. –

Antwort

3

Verwenden Sie einfach ein left join oder full outer join. In diesem Fall:

select b.item, a.value as valuea, a.valueid as valueida, 
     b.value as valueb, b.valueid as valueidb 
from b left join 
    a 
    on b.item = a.item and b.valueid = a.valueid; 

Wenn Sie Zeilen in a haben könnten, dass Sie auch ohne Treffer in b behalten wollen, dann full join verwenden. In diesem Fall sollten Sie coalesce(a.item, b.item) as item im select verwenden.

+0

Ok - Ich sehe mein Problem Das war eigentlich die Abfrage (zusammen mit FULL OUTER JOIN), die ich versuchte. Mein Problem war, dass ich auch auf die Artikelspalte (die ich nicht in meine Frage aufgenommen hatte). Ich war prädizieren nur auf einem der Tische: WHERE a.Item = 1 sollte es sein WHERE a.Item = 1 oder b.Item = 1 Vielen Dank für Ihre Antwort – user8723089

0

Verwenden RIGHT JOIN

SELECT TableB.ItemID , 
     TableA.Value AS ValueA , 
     TableA.ValueID AS ValueIDA , 
     TableB.Value AS ValueB , 
     TableB.ValueID AS ValueIDB 
FROM TABLEA 
     RIGHT JOIN TableB ON TableA.ValueID = TableB.ValueID;