테이블이 2개 있는데 간략하게 설명해주세요.
표 1:
강좌와 학생 간의 관계 표
sid cid
1 | 1
1 | 2
1번 학생은 CID 1과 2가 있는 강좌를 선택했습니다
표 2:
특정 코스 일정 d
cid day start end
1 | 2 | 14 | 16
2 | 2 | 13 | 15
화요일 14:00-16:00 강좌 CID는 1입니다
이 외에도 학생 테이블 s, sid sname이 있습니다. 강좌일정c, cid cname
여기서 r과 d에서 이 학생이 두 개의 상충되는 과정을 선택했음을 볼 수 있습니다. SQL 문을 사용하여 충돌하는 레코드를 쿼리하는 방법은 무엇입니까?
즉, 시간이 엇갈리는 학생이 CID를 선택한 기록은 어떨까요?
연결을 사용하여 sid에 해당하는 cid와 해당 시간을 쿼리할 수 있습니다. 그러면 코스가 시간상 충돌하는지 어떻게 확인할 수 있나요?
첨부: 이 질문의 시나리오는 제가 질문 세트에서 본 내용입니다. 저도 강좌 선택 시 판단에 동의합니다
이 문제는 해결하기 쉽습니다:
이 학생이 등록한 모든 강좌를 알아보세요
이 코스들 사이에 시간 충돌이 있는지 확인하세요
같은 날인지 확인하세요. 같은 날이면 시작 시간과 종료 시간을 비교하여 충돌하거나 겹치는 부분이 있는지 확인하세요.
같은 날이 아니어도 문제 없습니다
추가됨:
그러나 등록 시 이 문제를 피해야 하며 충돌이 허용되지 않습니다.
등록 시, 수강신청한 수강시간과 이미 수강신청한 수강시간이 중복되는지 확인하세요. 중복되는 경우 수강신청이 불가합니다.
타임라인에서 두 기간을 비교하여 충돌이 있는지 확인하는 것은 실제로 계산하기 쉽습니다
A - B, C - D
A - C - B 또는 A - D - B
C - A - D 또는 C - B - D
네 가지 상황 사이에는 시간 충돌을 나타내는 교차점이 있습니다.
사실 이런 상충되는 과목은 학생들이 과목을 선택할 때 판단해야 하고, 데이터베이스에 추가되어서는 안 된다고 생각해요
방법:
학생이 과목을 선택할 때마다 먼저 선택한 과목의 시간을 사용하여 현재 충돌하는 데이터가 데이터베이스에 이미 존재하는지 쿼리합니다
예:
으아악sid = 1인 학생이 cid = 1인 강좌를 선택했다고 가정하고, cid = 2인 강좌를 선택하면 SQL은 다음과 같습니다.
이렇게 확인하는 것은 당일 해당 기간 내에 선택한 강좌가 있는지 확인하는 것입니다. 결과가 있으면 선택한 강좌의 시간이 신청한 강좌와 충돌한다는 의미입니다
이런 문제는 자체 연결을 통해 해결할 수 있습니다.
으아아아