我正在建立一个数据库,该数据库对可以注册课程的人数有限制。在我的课程表中,我有一个包含int的Maximum列,在我的注册表中,它包含该课程的所有注册人员。因此,我的网页应该只显示注册表中注册人数<1的课程时间。课程表中允许的最大值。继承了我目前的疑问。
SELECT course.time,COUNT(registered.time),registered.maximum FROM course
JOIN (registered)
ON course.type = 'computing' OR
(registered.type = 'computing' AND course.time = registered.time)
GROUP BY course.time
HAVING COUNT(registered.time) < course.maximum
这个问题是无论课程时间如何都会计算所有注册人数,因此如果有2人在不同时间注册,则每次注册的人数仍为2人。
希望我解释好,希望有人可以提供帮助。感谢
答案 0 :(得分:0)
我不清楚为什么你有registered.maximum
和course.maximum
。如果我们知道实际的表结构,而不是根据您的代码进行猜测,那么回答这个问题会更容易。但是这里有:
SELECT course.time, COUNT(registered.time), registered.maximum
FROM course
JOIN registered
ON course.type = registered.type
AND course.time = registered.time
WHERE course.type = 'computing'
GROUP BY course.time, registered.maximum
HAVING COUNT(registered.time) < course.maximum
我还在registered.maximum
上创建了一个小组,因为否则会出现语法错误。
最后,我将连接更改为类型,然后将其添加到WHERE子句中。对我而言,这总是更有意义,尽管它有时可能会更慢。从我的角度来看,JOIN子句仅用于连接,而WHERE子句用于过滤。
更新:也可以获得没有注册的课程:
SELECT course.time, COUNT(registered.time), course.maximum
FROM course
LEFT OUTER JOIN registered
ON course.type = registered.type
AND course.time = registered.time
WHERE course.type = 'computing'
GROUP BY course.time, course.maximum
HAVING COUNT(registered.time) < course.maximum