كيف أصفّي نتيجة عمود محسوب باستعلام فرعي في SELECT؟

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

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

الإجابة

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

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

مثال

SELECT d.id, d.order_count
FROM (
  SELECT 1 AS id,
         (SELECT COUNT(*) FROM (SELECT 10 AS id) AS o) AS order_count
) AS d
WHERE d.order_count > 0;

هذا التنظيم يغير نطاق الاسم المستعار ويجعله مرئيًا للشرط الخارجي. لا ينبغي اعتباره ضمانًا بأن المحرك سيخزن النتيجة الوسيطة فعليًا، فذلك قرار تحسين منفصل.

باختصار: ضع الحساب في استعلام داخلي، ثم صفِّ العمود الناتج من مستوى خارجي يستطيع الوصول إلى اسمه.

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

اختبر فهمك

بافتراض عدم وجود عمود أصلي اسمه order_count، لماذا يفشل الاستعلام التالي؟

SELECT c.id,
       (SELECT COUNT(*)
        FROM orders AS o
        WHERE o.customer_id = c.id) AS order_count
FROM customers AS c
WHERE order_count > 2;