在下面的代码中,当我执行时,我得到20条记录(注释连接表中的TranslationMaster被注释)但是当我加入更多的TranslationMaster时,我得到了23条记录。理想情况下,我应该使用LEFT JOIN获得20条记录
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'
即使在一张桌子上我有17张唱片,在另一张牌桌上我有7张唱片,当我左右加入时我得到了119张(17x7)唱片。
答案 0 :(得分:2)
如果你的右表(在这种情况下是tm.TranslationCriteria2)有多个与你的左边结果匹配的记录(rec.UPC),你将获得更多记录。
答案 1 :(得分:2)
您似乎认为左连接不会产生比第一个表包含的行数更多的行。我将说明左连接如何导致更多行。
如果您有两个包含以下记录的表:
表人:
Column1 Column2
19880101-1111 Simon
19990101-2222 Daniel
20090101-3333 Fred
19120101-4444 Adam
表兴趣:
Column1 Column2
19880101-1111 Football
19990101-2222 Climbing
19880101-1111 Baseball
20090101-3333 Football
19880101-1111 Hockey
如果您执行以下左连接:
select p.Column2, i.Column2 from Persons p
left join Interests i on i.Column1 = p.Column1
您将获得以下结果:
Simon Football
Simon Baseball
Simon Hockey
Daniel Climbing
Fred Football
Adam null
您可以在Simons个人ID上获得多项匹配,因此您获得的行数比第一个表包含的数量多。