子查询 - 列出两个课程

时间:2013-10-17 00:01:22

标签: oracle subquery

我正在尝试提供一份列表,其中包含同时参加系统分析和项目管理课程的学生。

当我单独选择'系统分析'或者'项目管理'它给了我结果但不是我需要的。我需要参加这两门课程的学生。

SELECT FIRST_NAME, LAST_NAME, PHONE
FROM STUDENT d,ENROLLMENT f,SECTION g,COURSE h
WHERE d.STUDENT_ID = f.STUDENT_ID AND f.SECTION_ID = g.SECTION_ID AND g.COURSE_NO = h.COURSE_NO 
AND h.DESCRIPTION = 'Systems Analysis' AND h.DESCRIPTION = 'Project Management' 
AND DESCRIPTION NOT IN  
(SELECT m.DESCRIPTION
FROM STUDENT z,ENROLLMENT b,SECTION w,COURSE m
WHERE z.STUDENT_ID = b.STUDENT_ID AND b.SECTION_ID = w.SECTION_ID AND w.COURSE_NO = m.COURSE_NO
AND m.DESCRIPTION = 'Systems Analysis' AND m.DESCRIPTION = 'Project Management')
ORDER BY FIRST_NAME, LAST_NAME, PHONE;

但当我同时选择“系统分析”时和'项目管理'它没有给我任何行

SELECT FIRST_NAME, LAST_NAME, PHONE
FROM STUDENT d,ENROLLMENT f,SECTION g,COURSE h
WHERE d.STUDENT_ID = f.STUDENT_ID AND f.SECTION_ID = g.SECTION_ID AND g.COURSE_NO = h.COURSE_NO 
AND h.DESCRIPTION = 'Systems Analysis' AND h.DESCRIPTION = 'Project Management' 
AND DESCRIPTION NOT IN  
(SELECT m.DESCRIPTION
FROM STUDENT z,ENROLLMENT b,SECTION w,COURSE m
WHERE z.STUDENT_ID = b.STUDENT_ID AND b.SECTION_ID = w.SECTION_ID AND w.COURSE_NO = m.COURSE_NO
AND m.DESCRIPTION = 'Systems Analysis' AND m.DESCRIPTION = 'Project Management')
ORDER BY FIRST_NAME, LAST_NAME, PHONE;

如何提供一个列表,其中包含同时参加系统分析和项目管理课程但没有给我任何行的学生?

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT FIRST_NAME, LAST_NAME, PHONE
FROM STUDENT d,ENROLLMENT f,SECTION g,COURSE h
WHERE d.STUDENT_ID = f.STUDENT_ID AND f.SECTION_ID = g.SECTION_ID AND g.COURSE_NO = h.COURSE_NO 
AND h.DESCRIPTION = 'Systems Analysis' 
INTERSECT
SELECT FIRST_NAME, LAST_NAME, PHONE
FROM STUDENT d,ENROLLMENT f,SECTION g,COURSE h
WHERE d.STUDENT_ID = f.STUDENT_ID AND f.SECTION_ID = g.SECTION_ID AND g.COURSE_NO = h.COURSE_NO 
AND h.DESCRIPTION = 'Project Management' 

答案 1 :(得分:1)

或者

SELECT stud.FIRST_NAME, stud.LAST_NAME, stud.PHONE
FROM STUDENT stud,
inner join ENROLLMENT enr On stud.Student_ID = enr.student_ID
inner join SECTION sec On sec.Section_ID = enr.Section_ID
inner join COURSE syst On syst.course_no = sec.Course_No
inner join COURSE proj On proj.Course_no = sec.Course_No
Where syst.DESCRIPTION = 'Systems Analysis' 
AND proj.DESCRIPTION = 'Project Management' 
ORDER BY stud.FIRST_NAME, stud.LAST_NAME, stud.PHONE

如果我正确翻找了这些别名,你可以拥有你知道的有意义的别名。哦,并使用正确的连接语法。 Trick将加入课程两次,一次用于系统分析,一次用于项目管理。

PS如果那里有sql课程,我建议你接受它。