2 つの表があります。簡単に説明します。
表 1:
コースと学生の関係表 r
sid cid
1 | 1
1 | 2
学生番号 1 は、cid 1 と 2 のコースを選択しました
表 2:
コースの具体的なスケジュール d
cid 日開始終了
1 | 2 | 14 | 16
2 | 2 | 13 | 15
コースcidは火曜日14:00-16:00の1です
さらに、student テーブル s、sid sname があります。コーススケジュール c、cid cname
ここで、r と d から、1 この学生が 2 つの相反するコースを選択したことがわかります。 SQL ステートメントを使用して、このような競合するレコードをクエリするにはどうすればよいでしょうか?
つまり、時間の矛盾がある学生 SID が CID を選択した記録はどうでしょうか?
接続を使用して、SID に対応する CID と対応する時間をクエリできます。では、コースが時間的に競合しているかどうかを判断するにはどうすればよいでしょうか?
添付:この問題のシナリオは、私が問題集で見たものであり、コースを選択する際の判断にも同意します
これは簡単に解決できます:
この学生がサインアップしたすべてのコースを確認します
これらのコース間に時間が競合していないか確認してください
同じ日かどうかを確認します。同じ日の場合は、開始時刻と終了時刻を比較して、競合や重複がないかどうかを確認します。
ただし、この問題は登録時に回避する必要があり、競合は許可されません。
登録の際、登録したコースの時間と既に登録しているコースの時間に矛盾がないか確認してください。矛盾する場合は登録ができません。
タイムライン上の 2 つの期間を比較して矛盾があるかどうかを確認することは、実際には簡単に計算できます
A - B、C - D
A - C - B または A - D - B
C - A - D または C - B - D
4 つの状況の間に交差点があり、時間の矛盾を示します。
実際、このような矛盾した科目は学生が科目選択する際に判断されるべきであり、データベースに追加されるべきではないと思います
方法:
学生がコースを選択するたびに、まず選択したコースの時間を使用して、現在の競合するデータがすでにデータベースに存在するかどうかをクエリします
例:
リーリーsid = 1 の学生が cid = 1 のコースを選択し、cid = 2 のコースを選択すると、SQL は次のようになります:
チェックされるのは、その日のその時間帯に選択したコースがあるかどうかです。結果がある場合は、選択したコースの時間が、お申し込みのコースと重なっていることを意味します。
このような問題はセルフコネクションで解決できます。
リーリー