0

我有一个机构的时间表分配表。我必须弄清楚在一个时期内同一个房间是否有多个分配,这意味着在特定时期内不应有任何房间具有多个分配。

本题相关字段的表结构如下:

teacherid  subjectid groupname room  day  period 

  1           213        2       1    4      3
  2           123        4       1    5      3

等等...

如何在一个时期内退回那些分配多个房间的房间。

4

2 回答 2

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);
于 2013-06-18T05:00:35.063 回答
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

这做了两件事:

  1. 停止加入自己的行
  2. 停止碰撞行加入两次。如果没有大于(或小于也同样有效),即如果是!=,碰撞行将在连接的每一侧连接一次

你只要求房间,但如果select *你会得到关于碰撞的所有信息。

于 2013-06-18T04:34:47.367 回答