当SQL Server查询没有返回任何行(非空行)时,如何在聚合函数中包含它?

时间:2015-08-10 22:13:27

标签: sql-server tsql

我正在编写一个查询来查找没有任何可评分项目的课程。

在Blackboard中,当用户根本没有成绩时(例如,没有尝试过),表格中只有一行gradebook_grade

因此,如果课程中没有任何成绩,gradebook_grade表中没有引用黑板course_id主键的行<{1}}

这是我到目前为止所使用的:

use bblearn
select cm.course_id
from course_main cm
join gradebook_main gbm on cm.pk1 = gbm.crsmain_pk1
join gradebook_grade gbg on gbm.pk1 = gbg.gradebook_main_pk1
where cm.pk1 = 3947
group by cm.course_id
having count(gbg.pk1) <= 0

相关课程(pk1 3947)已确认无任何成绩。所以SQL Server自然会说0行受到影响。

问题是,它没有选择course_id。我猜having没有考虑空白/不存在的行。有什么方法可以构建查询以在没有返回任何内容时获取课程ID?我是否加入错误的列或在错误的列上使用where?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

使用left join

select cm.course_id
from course_main cm
left join gradebook_main gbm on cm.pk1 = gbm.crsmain_pk1
left join gradebook_grade gbg on gbm.pk1 = gbg.gradebook_main_pk1
where cm.pk1 = 3947
group by cm.course_id