【发布时间】:2013-01-09 06:26:12
【问题描述】:
我有以下表格:
架构
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,duction_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个学生的学期对应的记录,如果该学期没有学生,则不显示该学期的信息):
我希望在 Associates Count 列中没有员工的学期为 0。所以我用两个 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;
但是结果很奇怪:
【问题讨论】:
标签: sql oracle join left-join nvl