MySQL 如何检索表名作为字段

标签 mysql database database-design entity-relationship

我不确定如何准确表达我的问题,但我会尽力而为。我正在尝试为驾驶学校建模数据库。我有一个“时间段”表,这样类(class)、测试和注册面谈等事件都可以链接到工作人员的给定时间段。我提供的查询之一是能够查看工作人员的事件“时间表”。我已经构建了查询并且它正在运行,但是它连接了来自其他各种表的数据,我想查看这些表的名称以了解时间段是为什么事件保留的。

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;

这有效并显示下周给定员工的所有已注册时间段的列表。我想要的是一个进一步的专栏,它会显示它是什么类型的事件,例如“类(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/

相关文章:

php - MySQL 说字段不存在但确实存在

Mysql双左外连接与计数

php - imagefttext 从数据库中获取文本

c# - 如何将数据从一个数据库导入到另一个数据库

database-design - 构建平台授权权限模型

python - 带有 scrapy 的警告 "_mysql was already imported"

php - mysql从用户表中连续加入2个user_ids

database-design - 数据库表中的循环引用

mysql - 如何在没有生产和消费环境的情况下研究分布式数据库系统?连接Mysql

mysql - 多个供应商的产品定价历史数据库设计