2016-12-01 2 views
0

Im folgenden Code, wenn ich ausführe ich bekomme 20 Datensatz (Hinweis Join mit Tabelle TranslationMaster ist kommentiert), aber wenn ich mehr mit TranslationMaster schließe ich bekomme 23 Datensätze. Im Idealfall sollte ich 20 Datensatz mit LEFT JOINWarum mehr Datensätze mit LINKEN JOIN

erhalten
SELECT 
    RecChainId=t.ChainID, 
    RecSupplierId=t.SupplierID, 
    RecTranstypeId=rec.TransactionTypeID, 
    RecSupplierInvoiceNumber=rec.SupplierInvoiceNumber, 
    RecProductDescReport=rec.ProductDescriptionReported, 
    RecRawProdIdentifier=rec.RawProductIdentifier, 
    RecUPC=rec.UPC, 
    RecProductId=rec.ProductID, 
    RecStoreId=rec.StoreID 
    into #tmpSTRecData 
    from #tmpRecData t 
    Inner join dbo.StoreTransactions AS rec WITH (NOLOCK) 
    on rec.ChainID=T.ChainID and rec.SupplierID=T.SupplierID 
    and rec.StoreID=T.StoreID and rec.SaleDateTime =T.InvoiceDate 
    and rec.SupplierInvoiceNumber=T.InvoiceNumber AND rec.TransactionTypeID = 32 
    INNER JOIN JobProcesses AS jp 
    ON jp.ProcessID = rec.ProcessID AND jp.JobRunningID = 17 
    --LEFT JOIN TranslationMaster tm 
    --ON rec.UPC=tm.TranslationCriteria2  
    where rec.SupplierInvoiceNumber='000377647' 

Auch in einer Tabelle habe ich 17 aufnehmen und in einer anderen Tabelle habe ich 7 aufnehmen, wenn ich sie LEFT JOIN ich 119 (17x7) Aufzeichnungen.

Antwort

2

Sie erhalten mehr Datensätze, wenn Ihre rechte Tabelle (tm.TranslationCriteria2 in diesem Fall) mehr als einen Datensatz enthält, der Ihren linken Ergebnissen entspricht (rec.UPC).

2

Es scheint, als ob Sie glauben, dass ein linker Join nicht mehr Zeilen ergeben kann als die Anzahl der Zeilen, die die erste Tabelle enthält. Ich werde veranschaulichen, wie ein linker Join zu mehr Zeilen führen kann.

Wenn Sie zwei Tabellen mit den folgenden Informationen haben:

Tabelle Personen:

Column1    Column2 
19880101-1111  Simon 
19990101-2222  Daniel 
20090101-3333  Fred 

Tabelle Interessen:

Column1    Column2 
19880101-1111  Football 
19990101-2222  Climbing 
19880101-1111  Baseball 
20090101-3333  Football      
19880101-1111  Hockey 

Wenn Sie verbinden die folgenden links:

select p.Column2, i.Column2 from Persons p 
    left join Interests i on i.Column1 = p.Column1 

Sie erhalten folgendes Ergebnis:

Simon  Football 
Simon  Baseball 
Simon  Hockey 
Daniel  Climbing 
Fred  Football 

Sie erhalten multitple Matches auf Simons persönliche ID und deshalb bekommen Sie mehr Zeilen als die erste Tabelle enthält.

Verwandte Themen