كيف نكتب شرط توقف صحيحًا في CTE تكرارية؟

متقدمقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

تسمح 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 من الأساسيات للاحتراف.

اختبر فهمك

أي شرط يحل محل WHERE n < 1 ليولّد الكود الأعداد من 1 إلى 5 فقط؟

WITH RECURSIVE numbers AS (
  SELECT 1 AS n
  UNION ALL
  SELECT n + 1
  FROM numbers
  WHERE n < 1
)
SELECT n
FROM numbers
ORDER BY n;