كيف نكتب أكثر من CTE في استعلام واحد؟

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

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

الإجابة

يمكن تعريف عدة تعبيرات CTE في المستوى نفسه باستخدام عبارة WITH واحدة، مع فصل التعريفات بفواصل. يتكون كل تعريف من اسم وكلمة AS واستعلام داخل أقواس. بعد انتهاء التعريفات نكتب الاستعلام الرئيسي الذي يستخدم النتائج المسماة.

يمكن للتعريف اللاحق أن يرجع إلى تعريف سابق ضمن القائمة نفسها. لذلك من الطبيعي ترتيب الخطوات حسب اعتمادها: مصدر البيانات أولًا، ثم التصفية، ثم الترقيم أو الحساب النهائي. أما الرجوع إلى تعريف لم يظهر بعد في القائمة نفسها فلا يصلح كمرجع أمامي في هذا النمط.

مثال

WITH base AS (
  SELECT 1 AS id, 8000 AS salary
  UNION ALL SELECT 2, 5000
), high_paid AS (
  SELECT id, salary
  FROM base
  WHERE salary > 6000
), numbered AS (
  SELECT id,
         ROW_NUMBER() OVER (ORDER BY salary DESC, id) AS rn
  FROM high_paid
)
SELECT id, rn
FROM numbered;

توضح الأسماء مسؤولية كل مرحلة دون الحاجة إلى تداخل كثير من الأقواس داخل FROM. يجب عدم وضع فاصلة منقوطة بين التعريفات، لأنها تنهي التعليمة وتفصل المراحل عن بعضها. كما لا نكرر كلمة WITH بين تعريفين متجاورين في المستوى نفسه.

باختصار: اكتب WITH مرة واحدة، وافصل التعريفات بفواصل، وضع كل نتيجة قبل النتائج التي تعتمد عليها.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

أي صياغة صحيحة لتعريف CTE ثانية تعتمد على الأولى في المستوى نفسه؟