【发布时间】:2016-02-15 08:23:31
【问题描述】:
我的 SQL Server 数据库中有两个表 FACULTY_RECORDS 和 SCHOOL_RECORDS。我在表格FACULTY_RECORDS 中有包含学院所填写的关于他们参加的讲座的数据的行,以及包含学校分配给学院的时间段的行。
教师在表FACULTY_RECORDS 的LECTURE_START_TIME 列中以“10:15:00”格式填写他/她的讲座开始时间,学校以“0900-1200”格式提供给教师的时间段表SCHOOL_RECORDS 中的列LECTURE_TIME_SLOT。
现在,我有一个 SQL 查询,用于检查教师为他的特定科目输入的时间是否在学校分配的时间段内。但是,通过 SQL 查询,我得到了多个输出行,因为相同的开始时间落在多个时隙中。然而,如果讲座开始时间落在为同一主题分配的时间段内,我要求查询仅提供一个输出。
请查看我的 SQL 查询:
SELECT
a.FACULTY,
a.SUBJECT,
a.LECTURE_DATE,
a.LECTURE_START_TIME
FROM
(SELECT
b.LECTURE_TIME_SLOT, b.FACULTY, b.SUBJECT, b.LECTURE_DATE,
CAST(LEFT(b.LECTURE_TIME_SLOT, 2) + ':' + RIGHT(LEFT(b.LECTURE_TIME_SLOT, 4), 2) AS TIME) AS StartHours,
CAST(LEFT(RIGHT(b.LECTURE_TIME_SLOT, 4), 2) + ':' + RIGHT(b.LECTURE_TIME_SLOT, 2) AS TIME) AS EndHours
FROM
@FACULTY_RECORDS AS a, @SCHOOL_RECORDS AS b) AS b
JOIN
@FACULTY_RECORDS AS a ON a.FACULTY = b.FACULTY
AND a.SUBJECT = b.SUBJECT
AND a.LECTURE_DATE = b.LECTURE_DATE
WHERE
CAST(a.LECTURE_START_TIME AS TIME) >= b.StartHours
AND CAST(a.LECTURE_START_TIME AS TIME) <= b.EndHours
请参考下图:
【问题讨论】:
-
MySQL 不是 SQL Server。你用的是哪个?
-
对不起。我使用的是 Microsoft SQL Server 2008 而不是 mysql。
-
您好 Piero,感谢您提供的网址。我将尝试将sql查询修改为sql脚本,以检查它是否有效。
-
如果讲座开始时间在两个时间段内... 你想要哪个时间段你想任意不显示一个吗?您获得多个输出行的原因是因为多个行符合条件。您需要考虑一些规则来选择其中之一。最简单和最简单的解决方案是选择第一次匹配的时间。但是第二次匹配呢?这也是一个有效的匹配。您的报告实际上试图显示什么?
标签: sql sql-server database sql-server-2008