과제하면서 MySQL을 쓰다가 발견한 에러와 해결방법...!
error 1242 : subquery returns more than 1 row
쿼리문에서 return값이 하나 이상이어서 발생하는 에러인데 결론부터 말하자면 'any' 라고 붙여주면 된다.
(X) select * from student where stdid=(select stdid from advisor where instid='201201003');
(O) select * from student where stdid=any(select stdid from advisor where instid='201201003');
위와같은 다이어그램에서 advisor라는 관계형 테이블을 만들었는데
잘못만듬... '학생' 이라는 테이블에 instid를 외부키로 가져와서 테이블에 추가해주면 될것 같기도 한데 advisor라는 테이블에 각각 instid와 stdid를 외부키로 하는 테이블을 만들어 버렸다. 이미 데이터까지 다 넣어버린 상태라 그냥 하기로 하고 진행 ㅡㅡ;;
다음과 같은 테이블에서 instid가 '201201003' 인 조건만 찾아낸 뒤 매칭되는 학번을 이용해서 학생테이블로부터
정보를 가지고 오고 싶었다.
instid 201201003와 매칭되어 있는 stdid는
총 3개이다.
학생 테이블로 부터 stdid와 매칭되는 정보를 가져오기 위해 처음에 사용한 쿼리문은
select * from student where stdid=(select stdid from advisor where instid='201201003');
이었고, advisor 테이블로 부터 instid가 201201003인 stdid를 가져와 student 테이블의 조건으로 넣어주는 것이다.
하지만 여기에서 error 1242 : subquery returns more than 1 row 에러가 발생...
열심히 구글링을 해본 결과!!
ANY 를 넣어주면 된단다!!
select * from student where stdid=any(select stdid from advisor where instid='201201003');
any를 넣어주고 다시한번 검색을 해보면
잘 나오는걸 확인할 수 있었다.
'Computer Science > 기타' 카테고리의 다른 글
글자수 세는 프로그램 '몇글자' v.1.1 (0) | 2014.08.11 |
---|---|
ubuntu OpenGL 설치 및 컴파일 하기 (0) | 2012.11.28 |
ubuntu에서 gtk 컴파일시 fatal error: gtk/gtk.h: No such file or directory 문제 해결 (0) | 2012.11.28 |
ubuntu에서 gtk 설치 및 Hello world 프로그램 돌려보기 (1) | 2012.11.28 |
Ubuntu에서 Sublime Text 설치하기 (0) | 2012.10.10 |