2016-12-01 12 views
0

以下のコードでは、実行時に20レコード(TranslationMasterテーブルに注釈を付ける)を取得しますが、TranslationMasterでさらにレコードに参加すると、23レコードが取得されます。理想的には私は私が17のレコードを持っていると私は、私は119(17x7)レコードを取得し、それらを左結合するとき、別のテーブルに私は7レコードを持つLEFTと20のレコードが一つでも表にLEFT JOINでレコードを増やす理由

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' 

JOINを取得する必要があります。

答えて

2

あなたの右側のテーブル(この場合はtm.TranslationCriteria2)に、左側の結果(rec.UPC)に一致するレコードが複数ある場合は、さらにレコードを取得します。

2

左結合で最初のテーブルに含まれる行の数よりも多くの行が得られないと思われるようです。どのように左結合がより多くの行につながるかを説明します。

あなたは次のレコードを持つ2つのテーブルがある場合:

表者:

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

表趣味:あなたは、次の左を行うと

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 

あなたは、次のような結果を取得します:あなたはシモンズ個人IDにmultitple試合を取得し、したがって、あなたが最初のテーブルが含まれているよりも多くの行を取得

Simon  Football 
Simon  Baseball 
Simon  Hockey 
Daniel  Climbing 
Fred  Football 

を。