কম্পিউটার টিউটোরিয়াল

মাইএসকিউএল পুনরাবৃত্ত CTEs আয়ত্ত করা:ট্রাভার্সিং হায়ারার্কি এবং জেনারেটিং সিরিজ

একটি রিকার্সিভ 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 শুধুমাত্র যখন সদৃশ অপসারণ করা আবশ্যক।

উপসংহার

পুনরাবৃত্তিমূলক CTE গুলি WITH RECURSIVE ব্যবহার করে একটি বেস কেস এবং রিকার্সিভ কেস সহ স্ব-রেফারেন্সিং প্রশ্নগুলি সংজ্ঞায়িত করতে। MySQL-এ ক্রমিক ডেটা ট্রাভার্সাল (অর্জি চার্ট, ক্যাটাগরি ট্রি), সিরিজ জেনারেশন এবং গ্রাফ ট্র্যাভার্সালের জন্য এগুলি অপরিহার্য৷

মাইএসকিউএল পুনরাবৃত্ত CTEs আয়ত্ত করা:ট্রাভার্সিং হায়ারার্কি এবং জেনারেটিং সিরিজ


  1. জাভাস্ক্রিপ্টে উচ্চতর অর্ডার ফাংশন ব্যাখ্যা করুন।

  2. জাভাস্ক্রিপ্ট সমষ্টি ফাংশন একটি বোতাম ক্লিক করুন

  3. জাভাস্ক্রিপ্ট দিয়ে শুধুমাত্র নির্বাচিত ডিভিতে ক্লাস লুকাতে টগল করবেন?

  4. Python-এ IMDB ডেটাসেটে সময়ের সাপেক্ষে নির্ভুলতা এবং ক্ষতি কল্পনা করে এমন একটি প্লট তৈরি করতে TensorFlow কীভাবে ব্যবহার করা যেতে পারে?