عند تنفيذ استعلام يستخدم عامل التشغيل UNION، من الضروري التأكد من أن جميع عبارات 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