SQL 2引用第三个表的不同表的总和

SQL 2引用第三个表的不同表的总和,sql,oracle,join,sum,Sql,Oracle,Join,Sum,我对SQL非常陌生,我正在尝试获取一个学生的总学时,如果他们是选修学时还是核心学时。我正在检查课程表,该表给出了他们所选的课程,然后比较所选的课程,看看它们是核心课程还是选修课程,然后尝试得到两个单独的总数。不过,我不知道为什么两个总数都得到了0 Select nvl(sum(C.Credit_Hours),0) As CoreCreditHours, nvl(sum(C1.Credit_Hours),0) As ElectiveCreditHours FROM COURSE C

我对SQL非常陌生,我正在尝试获取一个学生的总学时,如果他们是选修学时还是核心学时。我正在检查课程表,该表给出了他们所选的课程,然后比较所选的课程,看看它们是核心课程还是选修课程,然后尝试得到两个单独的总数。不过,我不知道为什么两个总数都得到了0

Select nvl(sum(C.Credit_Hours),0) As CoreCreditHours, 
       nvl(sum(C1.Credit_Hours),0) As ElectiveCreditHours
FROM COURSE C 
JOIN COURSE_TAKEN ON 
    C.CRN = COURSE_TAKEN.CRN
JOIN COURSE C1 ON
    C1.CRN = COURSE_TAKEN.CRN
WHERE C.CRN IN(
    SELECT MINOR_CORE_REQUIREMENTS.CRN
    FROM MINOR_CORE_REQUIREMENTS
    WHERE MINOR_CORE_REQUIREMENTS.Minor_Name = 'Computer Science')
AND C1.CRN IN (
    SELECT MINOR_ELECTIVE_REQUIREMENTS.CRN
    FROM MINOR_ELECTIVE_REQUIREMENTS
    WHERE MINOR_ELECTIVE_REQUIREMENTS.Minor_Name = 'Computer Science')
AND COURSE_TAKEN.H_Number = 1; 

如果学生没有以下类别之一的课程,则需要使用外部联接:

Select nvl(sum(C.Credit_Hours),0) As CoreCreditHours, 
       nvl(sum(C1.Credit_Hours),0) As ElectiveCreditHours
FROM COURSE_TAKEN
LEFT JOIN COURSE C ON 
    C.CRN = COURSE_TAKEN.CRN AND C.CRN IN(
        SELECT MINOR_CORE_REQUIREMENTS.CRN
        FROM MINOR_CORE_REQUIREMENTS
        WHERE MINOR_CORE_REQUIREMENTS.Minor_Name = 'Computer Science')
LEFT JOIN COURSE C1 ON
    C1.CRN = COURSE_TAKEN.CRN AND C1.CRN IN (
        SELECT MINOR_ELECTIVE_REQUIREMENTS.CRN
        FROM MINOR_ELECTIVE_REQUIREMENTS
        WHERE MINOR_ELECTIVE_REQUIREMENTS.Minor_Name = 'Computer Science')
WHERE COURSE_TAKEN.H_Number = 1; 

非常感谢你,太好了!