我不确定如何确切地说出我的问题,但我会尽我所能。我试图为驾驶学校建立数据库模型。我有一个“时间段”表,以便课程,测试和注册访谈等活动都可以链接到工作人员的给定时间段。我提供的一个问题是能够查看工作人员的事件“时间表”。我构建了查询并且它正在工作,但是它连接来自各种其他表的数据,我希望看到这些表的名称,以了解为时隙保留的活动。
我执行检查员工时间表的查询如下:
SELECT Timeslot.*
FROM Timeslot
LEFT JOIN Test
ON Timeslot.Timeslot_ID = Test.Timeslot
LEFT JOIN Interview
ON Timeslot.Timeslot_ID = Interview.Timeslot
LEFT JOIN Lesson
ON Timeslot.Timeslot_ID = Lesson.Timeslot
WHERE Timeslot.Date BETWEEN CURDATE() AND (CURDATE() + INTERVAL 7 DAY)
AND Timeslot.Staff = 1;
这样可以显示下一周给定工作人员的所有已登记时间段的列表。我想要的是另一个列,它将显示它是什么类型的活动,例如“课程”,“面试”或“测试”。正如您所看到的,我目前将其作为字段存储在时间段表中,这意味着每次插入时间段时都必须指定此字段。我将数据库规范化为3NF并希望避免重复。有没有一种方法我模拟这个以获得表的名称,我考虑使用UNIONS和许多其他的东西,但可以使用一些帮助。
如果这看起来有点模糊,非常感谢和道歉。 麦克
答案 0 :(得分:4)
我捅了它,如果你保留你所描述的模型,那将是一个Case语句,如下:
Select Timeslot.*,
Case
When Test.Timeslot Is Not Null Then 'Test'
When Interview.Timeslot Is Not Null Then 'Interview'
When Lesson.Timeslot Is Not Null Then 'Lesson'
End As ActivityType
From ...
您的查询将在您可以使用的最末端有一个“ActivityType”列。