الانتقال إلى المحتوى الرئيسي
تتيح لنا دالة الجدول Merge إجراء استعلام على عدة جداول بالتوازي. وتفعل ذلك بإنشاء جدول Merge مؤقت، ثم تستمد بنية هذا الجدول من اتحاد أعمدة تلك الجداول واستنتاج الأنواع المشتركة.

إعداد الجداول

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

مخطط عدة جداول

يمكننا تشغيل الاستعلام التالي لعرض أعمدة كل جدول وأنواعها جنبًا إلى جنب، مما يسهّل ملاحظة الاختلافات.
لنستعرض الاختلافات:
  • يغيّر جدول 1970s نوع winner_seed من Nullable(String) إلى Nullable(UInt8)، ونوع score من String إلى Array(String).
  • يغيّر جدول 1980s نوعَي winner_seed وloser_seed من Nullable(UInt8) إلى Nullable(UInt16).
  • يغيّر جدول 1990s surface من String إلى Enum('Hard', 'Grass', 'Clay', 'Carpet')، ويضيف العمودين walkover وretirement.

الاستعلام عن عدة جداول باستخدام merge

لنكتب استعلامًا للعثور على المباريات التي فاز بها جون ماكنرو ضد لاعب كان المصنف الأول:
بعد ذلك، لنفترض أننا نريد تصفية تلك المباريات للعثور على المباريات التي كان فيها McEnroe مُصنَّفًا رقم 3 أو أقل. وهذا أكثر تعقيدًا قليلًا لأن winner_seed يستخدم أنواعًا مختلفة عبر الجداول المختلفة:
نستخدم الدالة variantType للتحقق من نوع winner_seed في كل صف، ثم نستخدم variantElement لاستخراج القيمة الفعلية. وعندما يكون النوع String، نحوّله إلى رقم ثم نجري المقارنة. تظهر نتيجة تنفيذ الاستعلام أدناه:

من أي جدول تأتي الصفوف عند استخدام merge؟

ماذا لو أردنا معرفة الجدول الذي تنتمي إليه الصفوف؟ يمكننا استخدام العمود الافتراضي _table للقيام بذلك، كما هو موضح في الاستعلام التالي:
يمكننا أيضًا استخدام هذا العمود الافتراضي ضمن استعلام لعدّ القيم في العمود walkover:
يمكننا أن نرى أن العمود walkover تكون قيمته NULL في جميع الحالات باستثناء atp_matches_1990s. سنحتاج إلى تحديث الاستعلام للتحقق مما إذا كان العمود score يحتوي على السلسلة W/O إذا كانت قيمة العمود walkover هي NULL:
إذا كان النوع الأساسي لـ score هو Array(String)، فعلينا استعراض عناصر المصفوفة والبحث عن W/O، أما إذا كان نوعه String، فيمكننا ببساطة البحث عن W/O في السلسلة النصية.
آخر تعديل في ٢ يوليو ٢٠٢٦