CTE कुछ भी 'असली' न बनाएं। वे केवल भाषा तत्व हैं, एक तालिका अभिव्यक्ति को व्यक्त करने का एक तरीका जिसका उपयोग किया जाएगा, बार-बार संभवतः एक बयान में। जब आप कहते हैं कि
WITH cteFoo AS (select ... from table where ...)
select ... from cteFoo where ...
कह
select ... from (select ... from table where ....) as cteFoo where ...
CTE का एक और तरीका है और व्युत्पन्न टेबल बहुत समान हैं, व्युत्पन्न तालिकाओं का उपयोग किसी भी प्रश्न एक CTE के रूप में rewriten किया जा सकता है, और किसी भी गैर पुनरावर्ती CTE कर सकते हैं व्युत्पन्न तालिकाओं का उपयोग कर एक क्वेरी के रूप में पुनः लिखा जाना चाहिए। निजी तौर पर, मैं सीटीई फॉर्म को और अधिक पसंद करता हूं जैसा कि अधिक संक्षिप्त और पढ़ने में आसान है।
सीटीई की अनुमति देने के एक मेज अभिव्यक्ति के लिए कई बार इस्तेमाल किया केवल एक बार की घोषणा होने के लिए:
WITH cte AS (select ... from table where ...)
select ...
from cte a join cte b on ...
where ...
शब्दार्थ ली गई तालिका के रूप के साथ इस की तुलना करें:
select ...
from (
select ... from table where ...) as a
join (
select ... from table where ...) as b
on ...
where ...
CTE स्पष्ट रूप से अधिक पठनीय है। लेकिन आपको समझना होगा कि दो रूप एक ही प्रश्न का उत्पादन कर रहे हैं। सीटीई फॉर्म सुझाव दे सकता है कि एक मध्यवर्ती परिणाम बनाया गया है, तो मध्यवर्ती परिणाम पर शामिल हो रहा है, लेकिन यह सच नहीं है। सीटीई फॉर्म को व्युत्पन्न तालिका एक के रूप में बिल्कुल उसी रूप में संकलित किया गया है, जो इस तथ्य को स्पष्ट करता है कि सीटीई का तालिका विस्तार दो बार चलाया जाता है।
स्रोत
2009-10-19 22:11:55
यह एक अच्छा उदाहरण है कि हम सभी को हमारे टी-एसक्यूएल में सेमीकॉलन का उपयोग क्यों करना चाहिए। अद्यतन के बाद सही ढंग से रखा गया है और हटाए गए बयानों से यह स्पष्ट हो जाता है कि सीटीई UPDATE स्टेटमेंट का _part है। – NReilingh