"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حل الخطأ \"عدد الأعمدة المتباينة في عبارات التحديد\" عند استخدام UNION؟

كيفية حل الخطأ \"عدد الأعمدة المتباينة في عبارات التحديد\" عند استخدام UNION؟

تم النشر بتاريخ 2024-11-07
تصفح:785

How to Resolve the \

خطأ: عدد أعمدة متباين في عبارات التحديد

عند تنفيذ استعلام يستخدم عامل التشغيل UNION، من الضروري التأكد من أن جميع عبارات SELECT الفردية المعنية تلتزم بـ معياران أساسيان:

  1. مطابقة عدد الأعمدة: يجب أن تسفر كل عبارة SELECT عن نفس عدد الأعمدة في مجموعة النتائج المستردة.
  2. البيانات المتسقة الأنواع: يجب محاذاة أنواع بيانات الأعمدة المقابلة عبر عبارات SELECT المختلفة.
تحليل المشكلة

بالنظر إلى الاستعلام المقدم:

SELECT * FROM friends
LEFT JOIN users AS u1 ON users.uid = friends.fid1
LEFT JOIN users AS u2 ON users.uid = friends.fid2
WHERE (friends.fid1 = 1) AND (friends.fid2 > 1)
UNION SELECT fid2 FROM friends
WHERE (friends.fid2 = 1) AND (friends.fid1  تشير رسالة الخطأ إلى وجود تناقض في عدد الأعمدة بين عبارتي SELECT المنضمتين بواسطة UNION. على وجه التحديد، تقوم عبارة SELECT الأولى بإرجاع جميع الأعمدة من الجداول المعنية، بينما تقوم الثانية بجلب عمود fid2 فقط.

الحل

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

   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid2
    WHERE f.fid1 = 1 
      AND f.fid2 > 1
UNION 
   SELECT f.*, u.*
     FROM FRIENDS AS f
     JOIN USERS AS u ON u.uid = f.fid1
    WHERE f.fid2  = 1 
      AND f.fid1 بدلاً من ذلك، يمكن للمرء استخدام عامل التشغيل UNION ALL، والذي يسمح بعبارات SELECT بأعداد أعمدة مختلفة. ومع ذلك، سيتم ملء الأعمدة غير المتطابقة بقيم NULL، والتي قد لا تكون مرغوبة في جميع الحالات.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3