|
|
1
2
我认为你的数据模型有缺陷。目前,您的模型每个房间有多个记录,每个插槽一个。因为您的查询只将学生限制在房间而不是插槽中,所以会产生交叉联接,这是错误的结果。 可以对查询进行组合以克服模型的缺点。不同的关键字是在这些场景中选择的钝器:
一个更好的解决办法是用老虎机桌。这样就不需要有多个WebRoom记录来表示单个物理房间。你说学生被分配到哪个时段是“无关紧要的”,但学生被分配到一个特定时段是应用程序成功运行的关键。 以下是一些概念证明表:
如您所见,修改后的查询清楚地显示了哪些插槽被占用,哪些插槽保持空闲状态:
或者,如果我们有一个支持透视查询的数据库(我在这里使用的是Oracle11g):
|
|
|
2
1
您在APC的评论中提到,您所需要的只是可用性计数。如果事实上是这样,那么我认为下面的设计更有效:
我做的
现在,如果您还想显示“slots”,那么您应该动态计算它(假设SQL Server 2005及更高版本):
|
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
Marc Guillot · 记录值时忽略冲突 1 年前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 1 年前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 1 年前 |