2016-10-18 4 views
0

두 개의 테이블 (물론 인라인 뷰와 테이블)에서 왼쪽 외부 조인을 수행하려고합니다. 내가 원하는 것은 등록 (0 또는 n 등록이있을 수 있음)이있는 모든 대학원 (3815 DISTINCT Grads를 알고 있음)을 나열하는 것입니다. 내가 받고있는 것은 등록을 한 대학원생 목록입니다 (3649 DISTINCT 학생). 나는 grad 'view'에서 모든 행을 얻지 못해 어디서 잘못 될지 확신하지 못한다. (나는보기 privs를 만들지 않았으므로 이것은 나의 해결 방법이다.)SQL 왼쪽 외부 조인은 내부 조인처럼 작동합니다.

SELECT C.*, D.FREEZE_EVENT, D.ACADEMIC_PERIOD, D.CAMPUS, D.COLLEGE, D.COLLEGE_DESC,D.MAJOR, D.MAJOR_DESC , D.STUDENT_RATE 
FROM 
(SELECT A.STUDENT_LEVEL_DESC, A.CAMPUS, A.CAMPUS_DESC, A.COLLEGE, A.COLLEGE_DESC, A.MAJOR_DESC, A.MAJOR, A.DEGREE_DESC, A.PERSON_UID, A.ID, A.NAME, 
A.OUTCOME_GRADUATION_DATE, A.STATUS, A.GRAD_YEAR, A.TRAINING_LOCATION, B.CITIZENSHIP_TYPE 
FROM ACAD_OUTOCME A, PERSON_DETAIL B 
WHERE A.STUDENT_LEVEL IN ('02','03') AND A.GRAD_YEAR = '2015' AND A.FREEZE_EVENT = '10TH_SEP2016' AND B.FREEZE_EVENT = '10TH_SEP2016' 
AND A.ID = B.ID) C 
LEFT OUTER JOIN ACAD_STUDY D ON 
C.CAMPUS = D.CAMPUS 
AND C.COLLEGE = D.COLLEGE 
AND C.MAJOR = D.MAJOR 
AND C.PERSON_UID = D.PERSON_UID 
WHERE D.FREEZE_EVENT = '10TH_SEP2016' 
ORDER BY C.NAME 

어떤 제안 :

이 내 코드? Toad Data Point를 사용하고 있습니다. 나는 또한 직장에서 대출 개발자이기 때문에 나는 이것으로 도움을 요청할 수있는 사람이 없으며, 구글은 나를 실패했다.

감사합니다.

답변

2
ON 조건에 WHERE 조건을 이동

:

Select C.* 
     , D.FREEZE_EVENT 
     , D.ACADEMIC_PERIOD 
     , D.CAMPUS 
     , D.COLLEGE 
     , D.COLLEGE_DESC 
     , D.MAJOR 
     , D.MAJOR_DESC 
     , D.STUDENT_RATE 
From (Select A.STUDENT_LEVEL_DESC 
       , A.CAMPUS 
       , A.CAMPUS_DESC 
       , A.COLLEGE 
       , A.COLLEGE_DESC 
       , A.MAJOR_DESC 
       , A.MAJOR 
       , A.DEGREE_DESC 
       , A.PERSON_UID 
       , A.ID 
       , A.NAME 
       , A.OUTCOME_GRADUATION_DATE 
       , A.STATUS 
       , A.GRAD_YEAR 
       , A.TRAINING_LOCATION 
       , B.CITIZENSHIP_TYPE 
     From ACAD_OUTOCME A 
     Join PERSON_DETAIL B On A.ID = B.ID 
     Where A.STUDENT_LEVEL In ('02', '03') 
       And A.GRAD_YEAR = '2015' 
       And A.FREEZE_EVENT = '10TH_SEP2016' 
       And B.FREEZE_EVENT = '10TH_SEP2016' 
     ) C 
Left Outer Join ACAD_STUDY D 
     On C.CAMPUS = D.CAMPUS 
      And C.COLLEGE = D.COLLEGE 
      And C.MAJOR = D.MAJOR 
      And C.PERSON_UID = D.PERSON_UID 
      And D.FREEZE_EVENT = '10TH_SEP2016' 
Order By C.NAME; 

WHERE 절은OUTER JOIN을 평가, 그것은 LEFT JOIN에서 NULL 기록을 필터링하는 데 원인이있다. 따라서 WHERE 절에 LEFT JOIN이라는 오른손 테이블을 사용하면 OUTER JOININNER JOIN으로 효과적으로 변환 할 수 있습니다.