كيف أطبق LIMIT على كل فرع قبل UNION ALL؟

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

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

الإجابة

قد تحتاج إلى اختيار أحدث سجل من كل مصدر ثم جمع السجلين في نتيجة واحدة. في هذه الحالة يجب أن يطبق ORDER BY وLIMIT داخل كل فرع، قبل عملية الدمج. تسمح الأقواس بتحديد نطاق هذه العبارات في MySQL، بحيث يكون لكل فرع ترتيبه وحده.

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

مثال

WITH books AS (
  SELECT 1 AS id UNION ALL SELECT 3
), movies AS (
  SELECT 2 AS id UNION ALL SELECT 4
)
(SELECT id FROM books ORDER BY id DESC LIMIT 1)
UNION ALL
(SELECT id FROM movies ORDER BY id DESC LIMIT 1)
ORDER BY id;

إذا استُخدم تاريخ يمكن أن يتكرر، فأضف معيارًا فاصلًا مثل المعرّف لضمان اختيار محدد عند التعادل في الترتيب الداخلي.

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

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

اختبر فهمك

أي صيغة تختار أكبر id من books وأكبر id من movies ثم تجمعهما، مع افتراض أن الجدولين غير فارغين؟