Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> SQL

MySQL पुनरावर्ती CTE में महारत हासिल करना:पदानुक्रमों का पता लगाना और श्रृंखला बनाना

<पी> एक रिकर्सिव सीटीई (कॉमन टेबल एक्सप्रेशन) एक सबक्वेरी है जो अपने नाम का उपयोग करके खुद को संदर्भित करता है। इसे WITH RECURSIVE का उपयोग करके परिभाषित किया गया है और एक समाप्ति शर्त होनी चाहिए। पुनरावर्ती CTE श्रृंखला उत्पन्न करने, पदानुक्रमित डेटा को पार करने और ग्राफ़ ट्रैवर्सल के लिए उपयोगी हैं।

सिंटेक्स

WITH RECURSIVE cte_name (col1, col2, ...) AS (
 -- Non-recursive (base case): initial rows
 SELECT col1, col2 FROM table_name
 UNION ALL
 -- Recursive case: references cte_name
 SELECT col1, col2 FROM cte_name WHERE condition
)
SELECT * FROM cte_name;
  • पहला SELECT बेस केस प्रारंभिक पंक्तियाँ प्रदान करता है।
  • UNION ALL प्रत्येक पुनरावृत्ति से पंक्तियाँ जोड़ता है (DISTINCT डुप्लिकेट हटाता है).
  • दूसरा SELECT पुनरावर्ती मामला तब तक चलता है जब तक WHERE स्थिति विफल नहीं हो जाती।

उदाहरण 1:पहले 5 विषम संख्याएँ उत्पन्न करें

WITH RECURSIVE odd_no (sr_no, n) AS (
 SELECT 1, 1
 UNION ALL
 SELECT sr_no + 1, n + 2
 FROM odd_no
 WHERE sr_no < 5
)
SELECT * FROM odd_no;
+-------+---+
| sr_no | n |
+-------+---+
| 1 | 1 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
| 5 | 9 |
+-------+---+
<पी> बेस केस रिटर्न (1, 1)। प्रत्येक पुनरावृत्ति sr_no को 1 से और n को 2 से बढ़ाती है। जब sr_no 5 तक पहुँच जाता है तो पुनरावर्तन रुक जाता है।

उदाहरण 2:कर्मचारी पदानुक्रम

<पी> प्रबंधक-कर्मचारी पदानुक्रम को पार करने का अधिक व्यावहारिक उपयोग?

-- Assume: employees(id, name, manager_id)
WITH RECURSIVE org_chart (id, name, level) AS (
 -- Base: top-level manager (no manager)
 SELECT id, name, 0
 FROM employees
 WHERE manager_id IS NULL
 UNION ALL
 -- Recursive: find direct reports
 SELECT e.id, e.name, oc.level + 1
 FROM employees e
 JOIN org_chart oc ON e.manager_id = oc.id
)
SELECT * FROM org_chart ORDER BY level;
<पी> यह शीर्ष-स्तरीय प्रबंधक (स्तर 0) से शुरू होकर एक संगठनात्मक वृक्ष बनाता है और प्रत्येक स्तर पर सभी रिपोर्टों को पुनरावर्ती रूप से पाता है।

मुख्य बिंदु

  • अनंत लूप से बचने के लिए पुनरावर्ती SELECT के WHERE क्लॉज में हमेशा एक समाप्ति शर्त शामिल करें।
  • MySQL की डिफ़ॉल्ट रिकर्सन सीमा 1000 पुनरावृत्तियों की है (cte_max_recursion_depth के माध्यम से कॉन्फ़िगर करने योग्य) ).
  • UNION ALL का उपयोग करें प्रदर्शन के लिए; UNION DISTINCT केवल तभी जब डुप्लिकेट को हटाया जाना चाहिए।

निष्कर्ष

<पी> पुनरावर्ती CTEs WITH RECURSIVE का उपयोग करते हैं बेस केस और रिकर्सिव केस के साथ स्व-संदर्भित प्रश्नों को परिभाषित करना। वे MySQL में पदानुक्रमित डेटा ट्रैवर्सल (संगठन चार्ट, श्रेणी पेड़), श्रृंखला निर्माण और ग्राफ़ ट्रैवर्सल के लिए आवश्यक हैं।

<पी> MySQL पुनरावर्ती CTE में महारत हासिल करना:पदानुक्रमों का पता लगाना और श्रृंखला बनाना


  1. पायथन में बाइनरी ट्री को उल्टा करें पायथन में बाइनरी ट्री को उल्टा करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमारा काम एक उल्टा बाइनरी ट्री बनाना है। तो अगर पेड़ नीचे जैसा है - उल्टा पेड़ इस तरह होगा इसे हल करने के लिए, हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे यदि रूट शून्य है, तो वापस आएं बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और राइट सबट्री को द

  1. प्रोग्रामेटिक रूप से एंड्रॉइड लीनियरलाउट में मार्जिन कैसे सेट करें? प्रोग्रामेटिक रूप से एंड्रॉइड लीनियरलाउट में मार्जिन कैसे सेट करें?

    यह उदाहरण दिखाता है कि Android LinearLayout में प्रोग्रामेटिक रूप से मार्जिन कैसे सेट करें। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्नलिखित कोड को res/layout/activity_main.java . में जोड़

  1. HTML DOM इनपुट अक्षम संपत्ति सबमिट करें HTML DOM इनपुट अक्षम संपत्ति सबमिट करें

    HTML DOM इनपुट सबमिट डिसेबल्ड प्रॉपर्टी का इस्तेमाल सेटिंग या रिटर्निंग के लिए किया जाता है कि सबमिट बटन को डिसेबल किया जाना चाहिए या नहीं। यह बूलियन मानों का उपयोग करता है जिसमें सबमिट बटन का प्रतिनिधित्व करने वाला सत्य अक्षम होना चाहिए और अन्यथा झूठा होना चाहिए। अक्षम संपत्ति डिफ़ॉल्ट रूप से गलत प