في عمليات قواعد البيانات، تأتي التحديات التي تتعامل مع الجداول والاستعلامات المتقدمة، ومن بين هذه التحديات هي استخراج البيانات التي ليست مشتركة بين جدولين. في هذه الحالة، يبدو أن لديك جدولين، واحد يسمى all_jobs
والآخر يسمى jobs_applied
. تحاول استعراض الوظائف من all_jobs
التي لم يتم التقديم لها بواسطة مستخدم ذو uid يساوي 10.
لتحقيق ذلك، يبدو أن استخدام الجملة LEFT JOIN هو اختيار جيد للحصول على جميع السجلات من all_jobs
بغض النظر عن وجود تطابق في الجدول الآخر. ومع ذلك، يحتاج الاستعلام إلى بعض التحسين لتحقيق المطلوب.
قد تكون الجملة الشرطية Where b.uid != 10
تسبب تحديدًا غير صحيح للبيانات. من الأفضل استخدام شرط b.uid IS NULL
لاختيار الوظائف التي لم يتم التقديم لها بواسطة المستخدم ذو uid يساوي 10.
إليك تحسين للاستعلام:
sqlSELECT a.job_id, a.jobtitle
FROM all_jobs a
LEFT JOIN jobs_applied b ON a.job_id = b.job_id AND b.uid = 10
WHERE b.uid IS NULL AND a.disable = 0 AND a.draft = 0;
في هذا الاستعلام، تم تحسين الشرط لاختيار الوظائف التي لم يتم التقديم لها بواسطة المستخدم ذو uid يساوي 10، وتم تضمين شرط للتحقق من تعطيل الوظيفة (a.disable = 0
) وأنها ليست في حالة مسودة (a.draft = 0
).
باستخدام هذا الاستعلام، يمكنك الحصول على قائمة الوظائف من all_jobs
التي لم يتم التقديم لها بواسطة المستخدم ذو uid يساوي 10.
المزيد من المعلومات
عند التعامل مع قواعد البيانات وكتابة الاستعلامات، يصبح من الأهمية بمكان فهم عمليات الانضمام وكيفية الوصول إلى البيانات المطلوبة بشكل دقيق. الجملة البرمجية التي قدمتها تهدف إلى استخراج الوظائف من جدول all_jobs
التي لم يتم التقديم لها بواسطة مستخدم معين (uid=10) وتكون غير معطلة وليست في حالة مسودة.
في الاستعلام:
-
SELECT a.job_id, a.jobtitle
: تقوم بتحديد الحقول التي ستظهر في النتيجة، وهيjob_id
وjobtitle
من الجدولall_jobs
. -
FROM all_jobs a
: تحدد الجدول الأساسي الذي سنستخدمه، وهوall_jobs
، حيث يتم تعيين اسم الجدول كـa
لتسهيل الرجوع إليه في الاستعلام. -
LEFT JOIN jobs_applied b ON a.job_id = b.job_id AND b.uid = 10
: يستخدم الانضمام اليسار (LEFT JOIN) لاسترجاع جميع الوظائف منall_jobs
بغض النظر عن وجود تطابق فيjobs_applied
، ولكن مع شرط إضافي لضمان أن uid يكون 10 في جدولjobs_applied
. -
WHERE b.uid IS NULL AND a.disable = 0 AND a.draft = 0
: تُضاف شروط إضافية في جملة WHERE، حيث يتم استبعاد السجلات التي تحتوي على uid غير موجود فيjobs_applied
(b.uid IS NULL)، وكذلك التحقق من أن الوظائف غير معطلة (a.disable = 0) وليست في حالة مسودة (a.draft = 0).
باستخدام هذا الاستعلام، يمكنك الحصول على قائمة الوظائف المطلوبة بناءً على المعايير التي حددتها. يجب أن تقدم هذه البيانات نتائج دقيقة وموثوقة بناءً على بنية قاعدة البيانات الخاصة بك.