我不确定如何准确表达我的问题,但我会尽力而为。我正在尝试为驾驶学校建模数据库。我有一个“时间段”表,这样类(class)、测试和注册面谈等事件都可以链接到工作人员的给定时间段。我提供的查询之一是能够查看工作人员的事件“时间表”。我已经构建了查询并且它正在运行,但是它连接了来自其他各种表的数据,我想查看这些表的名称以了解时间段是为什么事件保留的。
我为检查员工时间表而执行的查询如下:
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;
这有效并显示下周给定员工的所有已注册时间段的列表。我想要的是一个进一步的专栏,它会显示它是什么类型的事件,例如“类(class)”、“面试”或“测试”。如您所见,我目前将其作为一个字段存储在时隙表中,这意味着我必须在每次插入时隙时指定它。我会将数据库规范化为 3NF 并希望避免重复。有没有一种方法可以对此进行建模以获取表的名称,我考虑过使用 UNIONS 和许多其他东西,但可以使用一些帮助。
非常感谢,如果这看起来有点含糊,我们深表歉意。 迈克
最佳答案
如果您保留所描述的模型,我会尝试使用 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”列。
关于MySQL 如何检索表名作为字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289978/