NOT IN子查询返回没有结果

时间:2013-10-17 21:23:50

标签: sql oracle subquery

我正在尝试获得一个从未教过课程部分的教师名单。

我首先选择并获得一系列教授课程的成果

SELECT w.COURSE_NO,z.SALUTATION, z.FIRST_NAME, z.LAST_NAME,z.ZIP
FROM INSTRUCTOR z , SECTION w
WHERE z.INSTRUCTOR_ID = w.INSTRUCTOR_ID;

但是当我不进入以便我可以看到教练从未教过课程部分时它没有给我任何行。

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP
FROM INSTRUCTOR a,SECTION b 
WHERE a.INSTRUCTOR_ID = b.INSTRUCTOR_ID AND b.COURSE_NO NOT IN
(SELECT w.COURSE_NO
FROM INSTRUCTOR z , SECTION w
WHERE z.INSTRUCTOR_ID = w.INSTRUCTOR_ID)
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP;

当我试图选择那些从不参加课程的人时,为什么它没有给我任何行?

1 个答案:

答案 0 :(得分:2)

因为您只获得SECTION中的行。看起来你想要:

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP
FROM INSTRUCTOR a 
WHERE a.INSTRUCTOR_ID NOT IN
(SELECT w.INSTRUCTOR_ID 
FROM SECTION w)
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP;

或者

SELECT a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP
FROM INSTRUCTOR a 
LEFT JOIN SECTION w ON a.INSTRUCTOR_ID = w.INSTRUCTOR_ID
WHERE w.INSTRUCTOR_ID IS NULL
ORDER BY a.SALUTATION, a.FIRST_NAME, a.LAST_NAME,a.ZIP;