Di seguito sono riportate due tabelle #temp e # temp2.Differenza tra cross apply e inner join sulla base dell'esempio sottostante
create table #temp
(
col1 int
)
insert into #temp values(6),(1),(2),(3),(null)
create table #temp2
(
col1 int
)
insert into #temp2 values(1),(2),(1),(2),(3),(null)
e anche io ho due domande qui sotto con INNER JOIN:
SELECT t1.col1,
Sum(t2.col1) AS col1
FROM #temp t1
INNER JOIN #temp2 t2
ON t1.col1 = t2.col1
GROUP BY t1.col1
Risultato:
col1 col1
1 2
2 4
3 3
Ed seconda query è
con croce applica:
SELECT *
FROM #temp t1
CROSS apply (SELECT Sum(col1) AS col1
FROM #temp2 t2
WHERE t1.col1 = t2.col1) A
Risultato:
col1 col1
1 2
2 4
3 3
6 NULL
Ora, voglio sapere la differenza tra CROSS applicare e INNER JOIN. Conosco CROSS APPLY simile a INNER JOIN Per ogni singolo record di #temp (prima tabella) cross verrà eseguito.Ma sto ottenendo diversi risultati in base ai set di risultati sopra indicati. Qualcuno può spiegare?
Grazie in anticipo.
Per le righe per le quali non vi sono corrispondenze corrispondenti nell'espressione della tabella di destra, verranno riferiti i valori NULL nelle colonne dell'espressione della tabella di destra. La CROSS APPLY è semanticamente equivalente a INNER JOIN (o per essere più precisi è come un CROSS JOIN con una sottoquery correlata) con una condizione di join implicita di 1 = 1. –
vedere questo: http://explainextended.com/2009/07/16/inner-join-vs-cross-apply/ – CM2K
CROSS APPLY è stato progettato per offrire un'opzione "join" per le funzioni con valori di tabella. Quando si lavora con due tabelle/viste, sarebbe più appropriato utilizzare JOINs e salvare ['apply'] (https://technet.microsoft.com/en-us/library/ms175156 (v = sql.105) .aspx) parola chiave per le funzioni con valori di tabella. Ciò promuoverà chiarezza e manutenibilità per futuri miglioramenti o correzioni di bug. – DeadZone