يمكن اختيار أصحاب أعلى راتب في كل قسم بسؤال معاكس: هل يوجد موظف في القسم نفسه راتبه أعلى من راتب الموظف الحالي؟ إذا كانت الإجابة لا، فإن الموظف الحالي من أصحاب أعلى راتب. يعبر NOT EXISTS عن هذه الفكرة مباشرة باستخدام استعلام مترابط.
للحفاظ على التعادلات، يجب استخدام مقارنة صارمة مثل >. الموظف الذي يساوي راتبه أعلى راتب لا يوجد من يتجاوزه، فيبقى في النتيجة مع زملائه المتعادلين. أما استخدام >= دون استبعاد الصف نفسه، فيجعل كل موظف يجد على الأقل نفسه ويؤدي إلى استبعاده.
مثال
WITH employees AS (
SELECT 1 AS id, 10 AS department_id, 3000 AS salary
UNION ALL SELECT 2, 10, 3000
UNION ALL SELECT 3, 10, 1000
)
SELECT e.id FROM employees AS e
WHERE NOT EXISTS (
SELECT 1 FROM employees AS e2
WHERE e2.department_id = e.department_id
AND e2.salary > e.salary
);
تفترض هذه الصيغة أن الرواتب وأرقام الأقسام غير فارغة. إذا كانت تقبل NULL، فيجب تحديد طريقة التعامل مع القيم المجهولة قبل اعتماد المقارنة.
باختصار: انْفِ وجود راتب أعلى في القسم نفسه لتختار أصحاب الحد الأعلى وتحتفظ بجميع التعادلات.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.