INNER JOIN
を使用して複数のテーブルを結合しようとしています。ここでインナー結合がSQL Serverのクロス結合として機能するのはなぜですか?
はコード
IF OBJECT_ID('tempdb..#tmpRecData') IS NOT NULL
DROP TABLE #tmpRecData
--STEP 1
SELECT DISTINCT
pr.ChainID, pr.StoreID, pr.SupplierID, pr.ProductID,
MAX(CAST(pr.ActiveLastDate AS date)) AS 'Active Date'
--ChainID, SupplierID, StoreID, InvoiceDate, InvoiceNumber, SupplierInvoiceDate, SupplierInvoiceNumber
INTO
#tmpRecData
FROM
dbo.[ProductPrices_Retailer] AS pr
LEFT JOIN
ProductIdentifiers iden ON pr.ProductID = iden.ProductID
AND iden.ProductIdentifierTypeID = 2
WHERE
pr.ChainID = '119121'
AND pr.ActiveLastDate > '12/01/2016'
GROUP BY
pr.ProductID, pr.ProductName, iden.IdentifierValue,
pr.ChainID, pr.StoreID, pr.SupplierID
--STEP 2
SELECT
rec.ChainID, rec.StoreID, rec.SupplierInvoiceNumber,
rec.TransactionTypeID, rec.SupplierID, rec.SaleDateTime,
rec.ProductID, rec.UPC, rec.ProductDescriptionReported,
rec.RawProductIdentifier
FROM
#tmpRecData t
INNER JOIN
dbo.StoreTransactions AS rec WITH (NOLOCK) ON rec.ChainID = T.ChainID
WHERE
rec.ChainID = '119121'
DROP TABLE #tmpRecData
私は取得していますで4096(ステップ1)* 145979(ステップ2)= 725077693行(7.25億)
これは、レコードの膨大な数があるが、私はINNER JOIN
を使用しています、なぜそれがクロスジョインとして機能したのですか?
STEP2で同様のproductIDに参加する必要がある - それらはすべてwhere句に基づいて、同じchainIDを持っています。 ON句に追加する必要があるデータをリンクする他の列はありますか? –
はい、他のいくつかの列が参加していましたが、私たちは0のレコードを取得していました。 ChainIDはデータを与えた唯一の結合基準でした –
@PraveenSingh正しいものを推測するまで、すべての列を結合基準として試すことはできません。あなたは0レコードを取得している場合、おそらくあなたは0レコードを取得するはずですか? –