नीचे मेरे पास दो टेबल #temp और # temp2 हैं।क्रॉस लागू और आंतरिक शामिल होने के बीच अंतर उदाहरण के आधार पर
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)
और मैं भी नीचे दो प्रश्नों अंदरूनी के साथ शामिल हों है:
SELECT t1.col1,
Sum(t2.col1) AS col1
FROM #temp t1
INNER JOIN #temp2 t2
ON t1.col1 = t2.col1
GROUP BY t1.col1
परिणाम:
:col1 col1
1 2
2 4
3 3
और दूसरा क्वेरी
क्रॉस के साथ लागू है
SELECT *
FROM #temp t1
CROSS apply (SELECT Sum(col1) AS col1
FROM #temp2 t2
WHERE t1.col1 = t2.col1) A
परिणाम:
col1 col1
1 2
2 4
3 3
6 NULL
अब, मुझे पता है कि क्रॉस के बीच का अंतर लागू और आंतरिक शामिल हों चाहते हैं। मुझे पता है कि प्रत्येक व्यक्ति के लिए क्रॉन्स लागू होता है प्रत्येक के लिए और #temp (पहली तालिका) क्रॉस लागू करने के प्रत्येक रिकॉर्ड निष्पादित होगा। लेकिन मुझे उपरोक्त परिणाम सेट के आधार पर अलग-अलग परिणाम सेट मिल रहे हैं क्या कोई भी समझा सकता है?
अग्रिम धन्यवाद।
उन पंक्तियों के लिए जिनके लिए सही तालिका अभिव्यक्ति में कोई संबंधित मिलान नहीं है, सही तालिका अभिव्यक्ति के कॉलम में NULL मानों का संदर्भ लेंगे। क्रॉस आवेदन 1 = 1 की अंतर्निहित स्थिति के साथ INNER जॉइन (या एक सहसंबंधित उप-क्वेरी के साथ क्रॉस जॉइन की तरह अधिक सटीक होने के लिए) के बराबर है। –
कृपया इसे देखें: http://explainextended.com/2009/07/16/inner-join-vs-cross-apply/ – CM2K
क्रॉस आवेदन आपको तालिका-मूल्यवान कार्यों के लिए "शामिल" विकल्प देने के लिए डिज़ाइन किया गया था। जब आप दो टेबल/विचारों के साथ काम कर रहे हों, तो जॉइन का उपयोग करना और ['apply'] को सहेजना अधिक उपयुक्त होगा (https://technet.microsoft.com/en-us/library/ms175156 (v = sql.105) .aspx) तालिका-मूल्यवान कार्यों के लिए कीवर्ड। यह भावी संवर्धन या बग फिक्स के लिए स्पष्टता और रखरखाव को बढ़ावा देगा। – DeadZone