MySQL如何将表名称检索为字段

时间:2011-11-27 23:33:02

标签: mysql database database-design entity-relationship

我不确定如何确切地说出我的问题,但我会尽我所能。我试图为驾驶学校建立数据库模型。我有一个“时间段”表,以便课程,测试和注册访谈等活动都可以链接到工作人员的给定时间段。我提供的一个问题是能够查看工作人员的事件“时间表”。我构建了查询并且它正在工作,但是它连接来自各种其他表的数据,我希望看到这些表的名称,以了解为时隙保留的活动。

ER Model

我执行检查员工时间表的查询如下:

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和许多其他的东西,但可以使用一些帮助。

如果这看起来有点模糊,非常感谢和道歉。 麦克

1 个答案:

答案 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”列。