0

機関の時間割割り当ての表があります。1 つの期間に同じ部屋に複数の割り当てがあるかどうかを把握する必要があります。つまり、特定の期間に複数の割り当てがある部屋があってはなりません。

この質問に関連するフィールドを含むテーブル構造は次のとおりです。

teacherid  subjectid groupname room  day  period 

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

等々...

1 つの期間に複数の割り当てがあるこれらの部屋をどのように返すことができますか。

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

これにより、次の 2 つのことが行われます。

  1. 行同士の結合を停止します
  2. 行の衝突が 2 回結合するのを防ぎます。大なりなし (または小なりも同様にうまく機能します)、つまり の場合!=、衝突する行は結合の各側で 1 回結合されます。

部屋だけを要求しましたがselect *、衝突に関するすべての情報を取得できる場合。

于 2013-06-18T04:34:47.367 に答える