एसक्यूएल में स्पष्ट जुड़ने वाले ट्रांजिटिव क्लोजर के फायदे क्या हैं?

जब मैं एक आम कॉलम द्वारा तीन या अधिक तालिकाओं में शामिल हो रहा हूं, तो मैं अपनी क्वेरी इस तरह लिखूंगा:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id

एक सहयोगी ने हाल ही में मुझसे पूछा कि मैंने अपने प्रश्नों में स्पष्ट ट्रांजिटिव क्लोजर में शामिल हों क्यों नहीं किया:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id
AND    c.id = a.id

क्या वास्तव में इसके लिए कोई फायदे हैं? निश्चित रूप से अनुकूलक इसे स्वयं के लिए लागू कर सकता है?

संपादित करें: मुझे पता है कि यह बुरा वाक्यविन्यास है, लेकिन यह वैध विरासत कोड +1 का एक त्वरित और गंदा उदाहरण है < स्टू

0
ro fr bn

8 उत्तर

इस वाक्यविन्यास भाषा में शामिल होने से पहले दिन से उत्पन्न होता है। इसके साथ जुड़े समस्याओं के बारे में निश्चित नहीं है, लेकिन निश्चित रूप से भाषा संरचनाएं हैं जो तालिकाओं को जोड़ने के लिए अधिक समर्थित हैं।

0
जोड़ा

यदि आप इसे गणितीय दृष्टिकोण से देखते हैं, तो आपके उदाहरणों को एक ही परिणाम मिलना चाहिए।

ए = बी = सी

तो आपका पहला उदाहरण दूसरे के समान परिणाम देगा, इसलिए अतिरिक्त काम करने की आवश्यकता नहीं है।

0
जोड़ा

आपको आज के डेटाबेस इंजनों में ऐसा करने की आवश्यकता नहीं है, लेकिन ऐसा समय था जब ऐसी चीजें क्वेरी ऑप्टिमाइज़र को संभावित इंडेक्स पथों के रूप में अधिक संकेत देती हैं और इस प्रकार तेज़ परिणाम होते हैं।

इन दिनों कि पूरे वाक्यविन्यास वैसे भी बाहर जा रहा है।

0
जोड़ा

माइक्रोसॉफ्ट एसक्यूएल में इन दो प्रश्नों के लिए क्वेरी योजनाएं समान हैं - उन्हें उसी तरह निष्पादित किया जाता है।

0
जोड़ा

मैं सिर्फ यह कहना चाहता हूं कि इस तरह के शामिल होने वाले शैतान काम करते हैं।
बस इसके बारे में सोचो; शामिल होने और फ़िल्टर करने की स्थितियां कहां बयान में मिश्रित हो जाती हैं।
क्या होता है जब आपको 20 टेबलों में शामिल होने और 15 मानों पर फ़िल्टर करने की आवश्यकता होती है?

फिर, बस मेरे $ .02

0
जोड़ा

यह गंदी, बुराई विरासत वाक्यविन्यास है। आप इसे लिखते हैं

  का चयन करें
  * - ओह, और कभी भी * का उपयोग न करें
से
  ए
  एआईडी = बीआईडी ​​पर बी में शामिल हों
  बीआईडी ​​= सीआईडी ​​पर आंतरिक शामिल हों
 
0
जोड़ा

उस वाक्यविन्यास में इसके उपयोग हैं हालांकि ... ऐसे समय होते हैं जब आपको लगता है कि आपको एक से अधिक फ़ील्ड पर दो टेबलों में शामिल होने की आवश्यकता है

0
जोड़ा
आप तालिका 1 टी 1 से नियमित रूप से वाक्यविन्यास में शामिल हो सकते हैं। T1.field1 = t2.field1 और t.field2 = t2.field2 पर table2 t2 में शामिल हों
जोड़ा लेखक HLGEM, स्रोत

यह सवाल यहां एक बहुत गहराई से स्पष्टीकरण के साथ इस जैसा है:

जोएल स्पॉस्की लेख से SQL प्रश्न

संक्षिप्त जवाब यह है कि ट्रांजिटिव संपत्ति की स्पष्ट घोषणा क्वेरी को तेज कर सकती है। ऐसा इसलिए है क्योंकि क्वेरी ऑप्टिमाइज़ेशन एक छोटा काम नहीं है और कुछ SQL सर्वरों के साथ समस्या हो सकती है।

0
जोड़ा