שאלה שאלתית....

niceguy2

New member
שאלה שאלתית....

יש לי את הטבלה הבאה:
employees (empID,CourseID)​
כל עובד יכול להירשם לכמה קורסים שהוא רוצה ואני צריך למצוא את העובדים שנרשמו לאותן קורסים כמו העובד שה-ID שלו נתון לי (למשל X). יש דרך לעשות את זה בשאילתא פחות מסובכת מהצרות אליהן אני נכנס פה?
 

eli_leiba

New member
מותק - על join רפליקסיבי שמעת?

select a.id from emp a,emp b where a.courseid = b.courseid and b.id = X and a.id <> b.id bye
 

niceguy2

New member
close but not enough...

זה נותן לי את כל העובדים שנרשמו לאיזשהו קורס שעשה עובד X ואני צריך רק את אלו שנרשמו לכל הקורסים שהוא נרשם (או יותר)...
 

deja

New member
הפתרון

הפתרון:
select distinct a.empID from test employees where employees.CourseID in (select b.CourseID from test b where b.empID = X)​
 

deja

New member
סליחה תיקון

select distinct a.empID from employees a where a.CourseID in (select b.CourseID from employees b where b.empID = X)​
 

רון84

New member
ניסיון לעזור

אין לי בבית תכנה שתבדוק את זה, ואני די בטוח שבACCESS זה לא יעבוד, אבל מבחינת אינטואיציה זה אמור לפתור את הבעיה:
SELECT DISTINCT T0.empID FROM emp T0 RIGHT OUTER JOIN (select courseID from emp where empID=X) T1 ON T0.courseID = T1.courseID WHERE T0.empID<>X AND T0.courseID is null ORDER BY T0.empID​
מעניין אותי אם זה עובד... רון.
 

אלון_פ

New member
ה פ ת ר ו ן

חשבתי על זה הרבה - נראה לי זהו:
Select t2.empID, count(t2.CourseID) as cnt from (select * from employees Where empID = X ) as t1 Left join (select * from employees Where empID <> X ) as t2 on t1.CourseID = t2.CourseID Group by t2.empID having count(t2.CourseID) = (select Count(CourseID) from employees Where empID = X)​
 
למעלה