অন্যান্য প্রোগ্রামিং ভাষা থেকে এসকিউএল এ আসা, একটি পুনরাবৃত্ত ক্যোয়ারির কাঠামো বরং বিশ্রী দেখায়। ধাপে ধাপে এর মধ্য দিয়ে চলুন এবং মনে হচ্ছে এটি বিচ্ছিন্ন হয়ে পড়েছে।
নিম্নলিখিত সহজ উদাহরণ বিবেচনা করুন:
CREATE TABLE #NUMS
(N BIGINT);
INSERT INTO #NUMS
VALUES (3), (5), (7);
WITH R AS
(
SELECT N FROM #NUMS
UNION ALL
SELECT N*N AS N FROM R WHERE N*N < 10000000
)
SELECT N FROM R ORDER BY N;
এর মাধ্যমে চলুন।
প্রথমত, অ্যাঙ্কর সদস্য কার্যকর করে এবং ফলাফল সেটটি আরয়ে দেওয়া হয় R সুতরাং আর আরম্ভ করা হয় is 3, 5, 7}}
তারপরে, মৃত্যুদণ্ডটি ইউনিয়ন সমস্তের নীচে নেমে আসে এবং পুনরাবৃত্তকারী সদস্যকে প্রথমবারের জন্য মৃত্যুদন্ড কার্যকর করা হয়। এটি আর এর উপর নির্বাহ করে (এটি বর্তমানে আমাদের হাতে যে আর রয়েছে: {3, 5, 7।)। এটির ফলাফল {9, 25, 49}}
এটি এই নতুন ফলাফলটি দিয়ে কী করে? এটি বিদ্যমান {3, 5, 7} এর সাথে 9, 25, 49 {যুক্ত করে, ফলাফল ইউনিয়ন আর লেবেল করে এবং সেখান থেকে পুনরাবৃত্তি চালিয়ে যায়? বা এটি কি এই নতুন ফলাফলটিকে 9 25, 25, 49 only হিসাবে পুনরায় সংজ্ঞায়িত করে এবং পরে সমস্ত ইউনিয়ন-ইঙ্গিত করবে?
কোনটিই পছন্দ করে না।
আর যদি এখন {3, 5, 7, 9, 25, 49} হয় এবং আমরা পুনরাবৃত্তির পরবর্তী পুনরাবৃত্তিটি সম্পাদন করি তবে আমরা 9 25, 25, 49, 81, 625, 2401 with দিয়ে শেষ করব এবং আমাদের আছে lost 3, 5, 7 lost হারিয়েছে}
আর যদি এখন কেবল {9, 25, 49। হয় তবে আমাদের একটি বিভ্রান্তিকর সমস্যা রয়েছে। আর অ্যাঙ্কর সদস্য রেজাল্ট সেট এবং পরবর্তী সমস্ত পুনরাবৃত্ত সদস্য ফলাফল সেটগুলির ইউনিয়ন বলে বোঝা যায়। যদিও 25 9, 25, 49} শুধুমাত্র আর এর একটি উপাদান It এটি এখন পর্যন্ত আমরা যে পরিমাণ অর্থ সংগ্রহ করেছি এটি সম্পূর্ণ আর নয়। অতএব, আর থেকে নির্বাচন হিসাবে পুনরাবৃত্ত সদস্য লিখতে কোন মানে হয় না।
আমি অবশ্যই @ ম্যাক্স ভার্নন এবং @ মিশেল এস এর নীচে বিস্তারিত কী বলেছি তা প্রশংসা করি। যথা, যে (1) সমস্ত উপাদানগুলি পুনরাবৃত্তি সীমা বা নাল সেট পর্যন্ত তৈরি হয় এবং তারপরে (2) সমস্ত উপাদান একত্রিত হয়। এইভাবে আমি বুঝতে পারি যে এসকিউএল পুনরাবৃত্তি আসলে কাজ করে।
যদি আমরা এসকিউএলটিকে নতুনভাবে ডিজাইন করছিলাম তবে সম্ভবত আমরা আরও পরিষ্কার এবং স্পষ্টত বাক্য গঠন প্রয়োগ করব, এরকম কিছু:
WITH R AS
(
SELECT N
INTO R[0]
FROM #NUMS
UNION ALL
SELECT N*N AS N
INTO R[K+1]
FROM R[K]
WHERE N*N < 10000000
)
SELECT N FROM R ORDER BY N;
গণিতে একটি সূক্ষ্ম প্রমাণের মতো বাছাই করুন।
এসকিউএল পুনরাবৃত্তি হিসাবে এটি বর্তমানে দাঁড়িয়ে সমস্যাটি হ'ল এটি একটি বিভ্রান্তিকর উপায়ে লেখা। এটি যেভাবে লেখা হয়েছে তাতে বলা হয়েছে যে প্রতিটি উপাদান আর থেকে নির্বাচন করে গঠিত হয়েছে, তবে এর অর্থ এই নয় যে এখনও পর্যন্ত সম্পূর্ণ আর তৈরি করা হয়েছে (বা প্রদর্শিত হয়েছে)। এটি কেবল পূর্ববর্তী উপাদানটি বোঝায়।