يرتبط اسم CTE بالتعليمة التي تحتوي على عبارة WITH الخاصة به. بمجرد انتهاء التعليمة، ينتهي نطاق الاسم. لذلك لا يمكن كتابة استعلام جديد بعد فاصلة منقوطة والاعتماد على أن النتيجة المسماة ما زالت متاحة كما لو كانت جدولًا محفوظًا.
هذا الفرق مهم لأن شكل الاستخدام داخل FROM يشبه قراءة الجدول. التشابه في الصياغة لا يعني التشابه في مدة البقاء. تستطيع الرجوع إلى CTE أكثر من مرة ضمن التعليمة نفسها، لكن استخدامها في تعليمة مستقلة يتطلب تعريفًا جديدًا أو اختيار وسيلة أخرى لحفظ النتيجة.
مثال
WITH chosen AS (
SELECT 1 AS id
)
SELECT id FROM chosen;
WITH chosen AS (
SELECT 1 AS id
)
SELECT COUNT(*) AS total FROM chosen;
يعيد المثال تعريف النتيجة في التعليمة الثانية عمدًا. ويمكن بدل التكرار إعادة تنظيم الحل في تعليمة واحدة إذا كانت حاجات القراءة تسمح بذلك. لا تتحول CTE إلى جدول دائم أو مؤقت بسبب استخدامها عدة مرات داخل تعليمة واحدة.
باختصار: ينتهي نطاق CTE بانتهاء تعليمتها، ويجب تعريفها مجددًا إذا احتاج إليها استعلام مستقل لاحق.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.