2017-04-18 8 views
1

Ich habe versucht, die Produkt-ID mit der fehlenden notwendigen Version herauszufinden. Die folgende Abfrage zeigt das Beispiel:Wie (links/rechts) verbinden Sie zwei Tabellen?

DECLARE @ProductWithVersion TABLE(ProductId int, VersionId int) 
insert into @ProductWithVersion values(1281,7),(2220,8) 

DECLARE @NecessaryVersion TABLE(VersionId int) 
insert into @NecessaryVersion values(7),(8),(9) 

Ich möchte wie das Mapping-Ergebnis zeigen:

ProductId  VerisonId  VersionId 
1281    7    7 
1281    null   8 
1281    null   9 
2220    null   7 
2220    8    8 
2220    null   9 

Das heißt, die VERSIONID von @NecessaryVersion alle von ihnen zeigen sollte (7,8,9), und die VersionId von @ProductWithVersion zeigt null, wenn keine Versions-ID mit @NecessaryVersion zugeordnet ist.

Ich kann es nicht herausfinden, da es als linke komplizierter oder rechte beitreten ...

+0

sollte nicht der '@NecessaryVersion 'Tabelle enthält auch die' ProducdId'? –

+0

Welches Ergebnis möchten Sie, wenn 2 Produkt-IDs vorhanden sind? – Lamak

Antwort

1

Sie benötigen einen Vermittler cross join von ProductId wie so:

select p.ProductId, pv.VersionId, n.VersionId 
from @NecessaryVersion n 
    cross join (select distinct ProductId from @ProductWithVersion i) as p 
    left join @ProductWithVersion pv 
    on p.ProductId = pv.ProductId 
    and n.VersionId = pv.VersionId 

rextester Demo: http://rextester.com/VNITDI69180

kehrt:

+-----------+-----------+-----------+ 
| ProductId | VersionId | VersionId | 
+-----------+-----------+-----------+ 
|  1281 | 7   |   7 | 
|  1281 | NULL  |   8 | 
|  1281 | NULL  |   9 | 
+-----------+-----------+-----------+ 

Wenn Sie eine Tabelle haben, wo ProductId eindeutig ist, könnten Sie diese verwenden, anstatt die distinct ProductId aus einer Quelle auszuwählen.


Für die aktualisierten Beispieldaten rextester Demo: http://rextester.com/LVMFO44017

Die gleiche Abfrage (mit order by) liefert:

kehrt:

+-----------+-----------+-----------+ 
| ProductId | VersionId | VersionId | 
+-----------+-----------+-----------+ 
|  1281 | 7   |   7 | 
|  1281 | NULL  |   8 | 
|  1281 | NULL  |   9 | 
|  2220 | NULL  |   7 | 
|  2220 | 8   |   8 | 
|  2220 | NULL  |   9 | 
+-----------+-----------+-----------+ 
+0

Danke, keine Sorge um die "Bestellung von". Deines funktioniert gut !! – user3174976

+0

@ user3174976 Glücklich zu helfen! – SqlZim

Verwandte Themen