반응형

과제하면서 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를 넣어주고 다시한번 검색을 해보면

 

 

 

잘 나오는걸 확인할 수 있었다.

반응형

+ Recent posts