我应该从一个表的列中获取计数,并在另一个表中使用该计数创建一个新列。
在关系表DAY CARE CENTER中添加有关每个日托中心处理的总登记人数的信息。请注意,如果日托中心没有处理注册,那么对于该日托中心,必须将注册总数设置为零。在关系表DAY CARE CENTER上施加适当的一致性约束。
我根本没有任何适当的代码。我尝试了多种变体,但没有任何效果。我从另一个名为DAY_CARE_ENROLMENT的表中获得的注册数量。
我是sql的新手,请原谅我的愚蠢错误。有人可以帮忙吗?
ALTER TABLE DAY_CARE_CENTER
ADD totalEnrol INTEGER(1) DEFAULT '0';
UPDATE DAY_CARE_CENTER
SET totalEnrol = COUNT(enrolStartDate)
WHERE centerID IN (SELECT centerID FROM DAY_CARE_ENROLMENT
WHERE DAY_CARE_CENTER.centerID=DAY_CARE_ENROLMENT.centerID);
答案 0 :(得分:1)
如果我的理解正确,那么您需要先进行汇总,然后再尝试使用UPDATE
。也就是说,在子查询中聚合,然后JOIN
聚合到要更新的表中:
UPDATE DAY_CARE_CENTER dcc JOIN
(SELECT dce.centerID, COUNT(*) as cnt
FROM DAY_CARE_ENROLMENT dce
GROUP BY dce.centerID
) dce
ON dcc.centerID = dce.centerID
SET totalEnrol = cnt;
这可能是一个不好的方法。下次DAY_CARE_ENROLMENT
中的一行更改时,该计数将过时。您将需要重新运行UPDATE
或开始使用insert
/ update
/ delete
触发器。
最好实时计算这些值。仅在出于性能原因需要时才对其进行汇总。