次のテーブルがあります。
スキーマ
tbl_semester_empid {id, semester_name varchar(50), start_date}
tbl_batch_empid {id, semester_id,batch_name, session_room}
tbl_associate_empid {id、associate_name、batch_id、contact、join_date、induction_result、stream_result int}
問題のクエリは次のとおりです。学期ごとの仲間数を表示します。
私は3つのクエリを書きました:
--basic query
SELECT s.ID "Semester Id", COUNT(*) "Associate Count" FROM TBL_SEMESTER_593932 s, TBL_ASSOCIATE_593932 a, TBL_BATCH_593932 b
WHERE s.ID=b.SEMESTER_ID AND a.BATCH_ID=b.ID
GROUP BY s.ID;
--used NVL function
SELECT s.ID "Semester Id", NVL(COUNT(*),0) "Associate Count" FROM TBL_SEMESTER_593932 s, TBL_ASSOCIATE_593932 a, TBL_BATCH_593932 b
WHERE s.ID=b.SEMESTER_ID AND a.BATCH_ID=b.ID
GROUP BY s.ID;
-- used LEFT OUTER JOIN and JOIN
SELECT s.ID "Semester Id", NVL(COUNT(*),0) "Associate Count"
FROM TBL_SEMESTER_593932 s LEFT OUTER JOIN TBL_BATCH_593932 b ON s.ID=b.SEMESTER_ID
JOIN TBL_ASSOCIATE_593932 a ON a.BATCH_ID=b.ID
GROUP BY s.ID;
それらのすべてが次の出力を表示します (少なくとも 1 人の学生がいる学期に対応するレコードのみが表示されます。その学期に学生がいない場合、その学期の情報は表示されません)。
アソシエート数列にアソシエートがいない学期を 0 にします。そこで、2 つの LEFT OUTE JOIN で同じことを試しました。
SELECT s.ID "Semester Id", NVL(COUNT(*),0) "Associate Count"
FROM TBL_SEMESTER_593932 s LEFT OUTER JOIN TBL_BATCH_593932 b ON s.ID=b.SEMESTER_ID
LEFT OUTER JOIN TBL_ASSOCIATE_593932 a ON a.BATCH_ID=b.ID
GROUP BY s.ID;
ただし、結果は奇妙です。