STUDENT(Sid, Sname) : 학생의 학번과 이름
COURSE(Cid, Did) : 교과목의 번호와 개설한 학과번호
ENROL(Sid, Cid) : 수강하는 학생들의 학번과 교과목 번호
DEPT(Did, Dname): 학과번호와 학과이름
이러한 테이블이 있고 구하려는 것은 컴퓨터학과에서 개설한 교과목 모두를 듣는 학생의 학번과 이름을 검색하는 것입니다. 그래서 DEPT 테이블의 Dname이 '컴퓨터학과'인 Did와 COURSE 테이블의 Did가 같고 그 교과목들을 모두 GROUP_CONCAT으로 묶어서 ENROL 테이블의 각 학생들이 듣는 교과목들과 비교해서 일치하는 학생들의 학번과 이름을 출력하면 될 것 같은데 왜 안될까요..
아래와 같이 sql문 작성하였는데 어디가 틀렸는지 알려주세요 ㅠㅠ
SELECT S.Sid,S.Sname FROM STUDENT S INNER JOIN ENROL E ON S.Sid=E.Sid WHERE (SELECT Did FROM COURSE C) = (SELECT Did FROM DEPT D WHERE Dname='컴퓨터학과') GROUP BY S.Sid,S.Sname HAVING GROUP_CONCAT(E.Cid ORDER BY E.Cid) = (SELECT GROUP_CONCAT(Cid ORDER BY Cid) FROM COURSE WHERE (SELECT Did FROM COURSE C) = (SELECT Did FROM DEPT D WHERE Dname='컴퓨터학과'));
SELECT s.sid , s.sname FROM student s INNER JOIN enrol e ON s.sid = e.sid INNER JOIN course c ON e.cid = c.cid WHERE c.did IN (SELECT did FROM dept WHERE dname = '컴퓨터학과') GROUP BY s.sid, s.sname HAVING COUNT(*) = (SELECT COUNT(*) FROM course WHERE did IN (SELECT did FROM dept WHERE dname = '컴퓨터학과') ) ;