Hossam.m بتاريخ: 23 نوفمبر 2010 تقديم بلاغ مشاركة بتاريخ: 23 نوفمبر 2010 السلام عليكمالجملة دى SELECT employee_id, manager_id FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees); طبعا الغير منطقى بالمرة انه بيقولك no row selectedالمفروض كان يطله الموظفين اللى مش موجودين فى جدول المديرين "اللى هما مش مديرين على اى حد"تمام انا فاهم المشكلة وهى انه KING ملهوش manager فبيطلع null فى نواتج الinner query وده لسبب ما! بيخلى ال not in تشتغل كأنها <> ALLاشمعنا فى الحالة دى و ليه لازم استخدم where manager_id is not null فى ال inner query!وليه IN شغالة عادى من غير مشاكل مع ان فيها NULL فبيجيب KING فى النواتج بعكس NOT IN اللى مش بتجيب اى حاجة!ياريت حد يفهمنىوفرضا انى عاوز اعرف الموظفين اللى مش مديرين على حد بما فيهم اللى MANAGER_ID IS NULLاعمل ايه! اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
وليد علاء الدين بتاريخ: 23 نوفمبر 2010 تقديم بلاغ مشاركة بتاريخ: 23 نوفمبر 2010 عندك حق تتعجب ... لأنه سواء فيحالة الـ NOT IN و حالة الـ IN بيحصل مقارنة بين قيمة وبين NULL و في شرح الـ Material ما وضحش التفسير انما قالانه في حالة مقارنة بين قيمة و بين NULL يؤدي إلىNULL فقط في حالة NOT IN انما يعطي نتيجة في حالة الـ IN طبعابيقول ان NOT IN تكافيء <>ALL فيالنتيجة و ان الـ IN تكافيءالـ =ANY فيالنتيجة كمعلومة مش سبب. The reason is that all conditions that compare a nullvalue result in a null. So whenever null values are likely to be part of theresults set of a subquery, do not use the NOT IN operator. The NOT IN operatoris equivalent to <> ALL. اما لو عاوز تعرف الموظفين اللى مش مديرين على حد بما فيهم اللى MANAGER_ID IS NULL SELECT last_name, manager_id FROM employees WHERE employee_id NOT IN (SELECT nvl(manager_id ,0) FROM employees); SELECT last_name, manager_id FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM employees WHERE manager_id IS NOT NULL); لأن الـ manager_id IS NOT NULL موجودة في الـ INNER Query و ليست في الـ Main Query مع تحياتي ,,, اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.