我有一张关于机构时间表分配的表格。我必须弄清楚在一个时期内同一房间是否有多个分配,这意味着在特定时期内不应有任何分配多个房间。
此问题的相关字段的表结构如下:
teacherid subjectid groupname room day period
1 213 2 1 4 3
2 123 4 1 5 3
依旧......
如何在一个时间段内返回具有多个分配的房间。
答案 0 :(得分:1)
select distinct room from table t1 where exists
(select count(*) c1 from table where t1.room = room
and t1.day=day and t1.period = period having c1>1);
如果不需要考虑日期:
select distinct room from table t1 where exists
(select count(*) c1 from table where t1.room = room
and t1.period = period having c1>1);
答案 1 :(得分:0)
select t1.room
from timetable t1
join timetable t2
on t1.day = t2.day
and t1.period = t2.period
and t1.id > t2.id
连接非常简单 - 它会找到具有理智日期/周期的行,但是有一个值得注意的技巧...在连接条件中的最后一个比较:
and t1.id > t2.id
这有两件事:
!=
,则碰撞行将为连接的每一侧连接一次您只询问了房间,但如果您select *
,您将获得有关碰撞的所有信息。