
unión cruzada en sql
Publicado por BathanF (8 intervenciones) el 11/04/2023 13:19:19
Estoy intentando usar INNER JOIN para unir numerosas tablas.
Aquí está el código:
Obtengo 725077693 filas al multiplicar 4096 (Paso1) por 145979 (Paso2) (725 millones)
Esta es una gran cantidad de registros, pero usé INNER JOIN; entonces, ¿por qué funcionó como CROSS JOIN?
Aquí está el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
Obtengo 725077693 filas al multiplicar 4096 (Paso1) por 145979 (Paso2) (725 millones)
Esta es una gran cantidad de registros, pero usé INNER JOIN; entonces, ¿por qué funcionó como CROSS JOIN?
Valora esta pregunta


0