4개의 테이블이 있습니다
커리큘럼 : 커리큘럼_ID | 과목 | 제목
커리큘럼 회차순서 : 커리큘럼_ID | 회차_ID | 회차순서
커리큘럼 학생 등록 관리 : 학생_ID | 커리큘럼_ID
학생 커리큘럼(회차별) 문제지 제출 : 학생_ID | 회차_ID | 문제번호 | 답안
이런 식으로 되어있습니다.
여기서 궁금한 것이
학생이 등록이 되어있으나 회차별 문제를 안 푼 학생(문제지 제출 테이블에 정보가 없는 학생)을 쿼리로 출력할 수 있나요?
JOIN을 사용하면서 지금 쿼리를 짜고 있는데 도통 안되서 질문을 올리게 되었습니다
답변 감사합니다
1. 일단 테이블들의 pk가 무엇인지, 테이블간 관계가 1:1인지 1:다인지 설명이 없다면 너무 추상적이어서 솔루션을 제시하는데 한계가 있습니다.
2. [커리큘럼 학생 등록 관리] 테이블은 학생id, 커리큘럼id로 되어 있는데 [학생 커리큘럼(회차별) 문제지 제출] 은 학생id,회차id로 되어 있네요.
해당 회차가 어느 커리큘럼에 속하는지 구분이 가능한가요? 즉, 회차id는 유니크한가요? 만일 유니크하지 않다면 모델링에 문제가 있어 쿼리가 불가능해 보입니다.
3. 만일 회차id가 유니크 하다면 [커리큘럼 학생 등록 관리 : 학생_ID] 와 [커리큘럼 회차순서]를 조인하여 해당 학생이 등록한 모든 회차id를 구할 수 있고 이 집합과 [학생 커리큘럼(회차별) 문제지 제출] 를 아웃조인 한다면 특정 학생이 특정 회차에 문제지를 제출했는지 여부를 알 수 있겠네요
select *
from (
select 커리큘럼_ID,회차_ID,학생_ID
from 커리큘럼 학생 등록 관리 a, 커리큘럼 회차순서 b
where 1=1
and a.커리큘럼_ID = b.커리큘럼_ID
) a, 학생 커리큘럼(회차별) 문제지 제출 b
where 1=1
and a.학생_ID = b.학생_ID (+)
and a.회차_ID = b.회차_ID (+)