إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

حاجة مش منطقية!


1 رد (ردود) على هذا الموضوع

#1 Hossam.m

Hossam.m

    عضو

  • الأعضــاء
  • 20 مشاركة
  • الاهتمامات:Oracle Databases Development and administration
    Redhat Linux administration
    Databases concepts and ERD Modeling
    Databases Migration
    PHP and MySQL
    SQL Server Administration and development

تاريخ المشاركة 23 November 2010 - 01:29 PM

السلام عليكم
الجملة دى
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
اعمل ايه!


Oracle Databases Development
Oracle Databases Administration [OCA]
Redhat linux administration
MSSQL Development and administration
PHP and MySQL


#2 وليد علاء الدين

وليد علاء الدين

    عضو

  • الأعضــاء
  • 32 مشاركة
  • الاهتمامات:internet, movies & Games

تاريخ المشاركة 24 November 2010 - 01:16 AM

عندك حق تتعجب ... لأنه سواء فيحالة الـ 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


مع تحياتي ,,,


نسي الطين ساعة انه طين حقير فصال تيها وعربد وكسا الخز جسمه فتباهى وحوى المال كيسه فتمرد


يا أخي لا تمل بوجهك عني ما انا فحمة ولا أنت فرقد أنت لم تصنع الحرير الذي تلبس واللؤلؤ الذي تتقلد