【发布时间】:2019-08-17 02:06:29
【问题描述】:
我对sql很陌生,所以如果有一个简单的答案,请原谅我。我正在为学校的课程设置一个日程安排数据库。每个班级有 3 到 9 名学生。我最初打算使用两个带有 JOIN 的表,如下所示:
表 1:班级每周开始时间结束时间 Student1 ... Student9
加入
表 2:日期班主任
这将按日期列出所有课程。问题是,如果有新学生加入课程,更新表 1 会将该学生添加到之前的所有行中,尽管该学生没有参加这些课程。有没有更好(更简单)的方法来设置保留过去行中的数据的计划?
*edit 与其说是代码问题,不如说是数据组织问题。 (我在下面包含了我正在使用的代码)。
表 1:班级每周开始时间结束时间 S1 S2 S3...S9
English Mon 8:00 9:00 Jon Sue Null....Null
表 2:日期班主任
2019-01-07 English ProfX
2019-01-14 English ProfY
2019-01-21 English ProfZ
那么 JOIN 看起来像
时间表
2019-01-07 English ProfX Mon 8:00 9:00 Jon Sue Null....Null
2019-01-14 English ProfY Mon 8:00 9:00 Jon Sue Null....Null
2019-01-21 English ProfZ Mon 8:00 9:00 Jon Sue Null....Null
现在假设有新学生 (Tim) 加入下一堂课。如果我用新学生更新表 1,之前的所有行都将包括 Tim,但他 2019-01-07 或 2019-01-14 不在课堂上,所以我的表看起来像这样。
2019-01-07 English ProfX Mon 8:00 9:00 Jon Sue Tim....Null
2019-01-14 English ProfY Mon 8:00 9:00 Jon Sue Tim....Null
2019-01-21 English ProfZ Mon 8:00 9:00 Jon Sue Tim....Null
当我只想要这个时:
2019-01-07 English ProfX Mon 8:00 9:00 Jon Sue Null....Null
2019-01-14 English ProfY Mon 8:00 9:00 Jon Sue Null....Null
2019-01-21 English ProfZ Mon 8:00 9:00 Jon Sue Tim....Null
////代码////
Create VIEW 'schedule' SELECT Table1.*, Table2.*
FROM Table1
INNER JOIN Table2
ON (Table1.class = Table2.class);
【问题讨论】:
-
如果你能分享样本数据,那将有助于解决它。
-
这是一个简单的 VIEW 和 JOIN。我添加了代码并进一步澄清了问题。
-
您是否将 Tim 添加到与 Jon Sue 相同的列中作为逗号分隔值?或者将 Tim 添加到新列?无论如何,这不是一个好习惯。
-
@IMS Student1 到 Student9 是 9 个不同的列。这种方法看起来简单且适合我的应用程序。如果您知道,请推荐一种更好的方法。
-
您可以有一个单独的学生表来保存学生详细信息(学生 ID、学生姓名)。在表 1 中,您可以有 ID、星期几、开始时间、结束时间。并且您可以有一个映射表来将学生 ID 映射到表 1 ID。
标签: sql