【发布时间】:2014-06-13 11:19:48
【问题描述】:
我希望这张图片足以说明理性表。
SELECT count(*)
FROM Student
正在返回学生人数
我不确定这句话是做什么的。
SELECT c#
FROM Enrolment
GROUP BY c#
HAVING count(*) = ???
这是由 c# 分组的。所以 count(*) 必须返回每门课程注册的学生人数。因此,HAVING count(*) = ??? 一定不能定义来检查两个值是否相等!如果有人可以在这里解释having 的作用,我将不胜感激?
添加编辑
-
第三个选择子句中这个选择的结果是一个常数值吗?我们称之为
A = 255(学生人数的假设)SELECT c# FROM Enrolment GROUP BY c# HAVING count(*) = (SELECT count(*) FROM Student)
我的问题正是在第二次选择中,having count(*) = (count* in another select)
是在第二次选择中比较 C#(课程编号)的出现值与在第三次选择中出现 S#(学生编号)的值还是类似一个for循环比较第二次选择中C#(课程编号)的不同值与学生人数的值?我的困惑主要是有条件!这是否意味着如果
【问题讨论】:
-
你想得到什么?学生名单和他们的班级名称?
-
@BadrGhatasheh 我相信目标是只获得所有学生都参加的那些课程(课程名称)。它可以解释(在我看来)
having count(*) = (select count(*) from student)的奇怪构造 -
这比我的假设更有意义
-
我的目标是找出第二个选择子句中比较的语句是什么?正如@CoolWilly 所说,我知道这是一个奇怪的结构,但具体来说这里比较的是什么?
-
@BadrGhatasheh 请查看我的问题中已编辑的部分。
标签: sql oracle select oracle11g having