2016-10-18 2 views
0

2つのテーブル(つまり、インラインビューとテーブル)に対して左外部結合を実行しようとしています。 私は何人かの登録者(0人またはn人の登録者がいる可能性があります)と一緒に、すべての大学院生(3815人のDISTINCT大学院生がいることを知っています)を一覧表示します。私が得ているのは、登録している卒業生のリスト(3649 DISTINCTの学生)だけです。私はgradのviewからすべての行を取得しないとどこが間違っているのかわかりません(私はview privを作成していないので、これは私の回避策です)。SQL Left Outer Joinは、内部結合のように動作します。

これは私のコードです:

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を使用しています。私は仕事のローンデベロッパーでもあるので、私はこれを手伝ってくれる人がいなくて、Googleは私を失ってしまった。

ありがとうございます!

答えて

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句が、それはLEFT JOINからNULLレコードをフィルタリングする原因となるOUTER JOINを、評価されます。したがって、WHERE句にLEFT JOINという右側の表を表示すると、OUTER JOININNER JOINに効果的に変換されます。

関連する問題