لحل هذه المشكلة في T-SQL والحصول على النتيجة المطلوبة، يمكنك استخدام استعلام NOT EXISTS
للتحقق مما إذا كان هناك مستخدم آخر لديه نفس UserId
ولكن ليس لديه LessonId
نفسه. هنا الاستعلام الذي يمكن استخدامه:
sqlSELECT *
FROM LessonList ll
WHERE
(LessonId = 102 AND LessonValue = 1002)
OR
(LessonId = 103 AND LessonValue = 1003)
OR
(LessonId = 102 AND LessonValue = 1008)
OR
(UserId = 11 AND NOT EXISTS (
SELECT 1
FROM LessonList
WHERE UserId = ll.UserId
AND LessonId = 103
))
هذا الاستعلام يختار جميع الصفوف التي تطابق شروط LessonId و LessonValue الأولية، ثم يضيف شرطًا إضافيًا باستخدام NOT EXISTS
للتحقق من عدم وجود مستخدم آخر (بنفس UserId
) لديه LessonId = 103
.
المزيد من المعلومات
بالتأكيد، إليك المزيد من المعلومات حول الاستعلام والطريقة التي يعمل بها:
-
يتم استخدام العملية
SELECT * FROM LessonList
لاسترجاع جميع الصفوف من الجدولLessonList
. -
يتم وضع شروط البحث في العبارات
WHERE
في الاستعلام، حيث تُستخدم الشروط المتعلقة بـLessonId
وLessonValue
لتحديد الصفوف التي تحتوي على تلك القيم. -
يتم استخدام
NOT EXISTS
للتحقق مما إذا كان هناك صف آخر في الجدول يحتوي على نفسUserId
ولكنLessonId
يختلف عن 103. إذا كان هناك صف مطابق، فإن هذا يعني أن هناك مستخدم آخر يمتلكLessonId
مختلفة عن 103، وبالتالي لا يتم تضمينه في النتيجة. -
باستخدام
NOT EXISTS
، يتم فحص الجدولLessonList
من جديد للتحقق مما إذا كان هناك صف آخر يحتوي على نفسUserId
وLessonId
مختلف عن 103.