تسمح WITH RECURSIVE بتعريف نتيجة تعتمد في جزء منها على نتائج سابقة من التعريف نفسه. يتكون المثال البسيط من جزء ابتدائي ينتج القيمة الأولى، وجزء تكراري يولد القيمة التالية. نحتاج إلى شرط توقف يمنع توليد صفوف إضافية عندما نصل إلى الحد المطلوب.
عند توليد الأعداد من واحد إلى خمسة باستخدام SELECT n + 1، يفحص الشرط قيمة n الحالية قبل إنتاج القيمة الجديدة. لذلك يكون الشرط المناسب هو أن تكون القيمة الحالية أصغر من خمسة. يسمح الصف الذي يحمل أربعة بإنتاج خمسة، بينما لا يسمح الصف خمسة بإنتاج ستة.
مثال
WITH RECURSIVE numbers AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1
FROM numbers
WHERE n < 5
)
SELECT n
FROM numbers
ORDER BY n;
إذا استخدمنا شرطًا يسمح للقيمة خمسة بالاستمرار، فسنتجاوز الحد بواحد. وإذا منعنا القيمة أربعة، فلن نصل إلى خمسة. لا ينبغي الاعتماد على حد عمق التكرار في الخادم بوصفه بديلًا عن شرط منطقي صحيح ينهي بناء النتيجة المطلوبة.
باختصار: اكتب شرط التوقف بناءً على الصف الحالي وما سينتجه في الخطوة التالية، لتجنب زيادة النتيجة أو نقصها.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.