对于下一个问题,我找不到正确的查询((见图片)
在此表中,第一天是星期一,第二天是星期二。。我必须找出哪位老师周一第一个小时有空,但在学校,因为他/她必须在那天晚些时候教书。所以结果可能只会给约翰和苏珊,而不会给马克和汤姆,因为他们不必在那天教书。
我尝试了简单查询和嵌套查询,但都没有给出正确的结果。
select distinct Teacher from Schedule where Day = 1 and Hour <> 1 order by Teacher ASC
select distinct Teacher from Schedule where Day = 1 and NOT Hour = 1 order by Teacher ASC
更复杂的查询没有任何区别。
我做错什么了?
1条答案
按热度按时间qlvxas9a1#
在这种特殊情况下,可以使用聚合。检查教师每天的最小小时数是否大于1。
对于任何一天和任何一小时,一种更通用的方法可能使用条件聚合。如果老师在一天中教一个特定的小时,只算一次。所以,当计数为0时,我们知道他们不在给定的时间上课。
(更换
?
分别使用当天或小时的值。)另一种方法是使用
NOT EXISTS
以及相关子查询。如果您有一个包含所有教师的表,您也可以将其用作源并按
EXISTS
(当天)和NOT EXISTS
(白天和小时)瞄准schedule
.