홈페이지 제작 전문 업체 Infovider 光明

[서버오류]500에러 subquery expected to return a scalar value but returned multiple rows 문제 해결 본문

프로그래밍 for server

[서버오류]500에러 subquery expected to return a scalar value but returned multiple rows 문제 해결

GuruMaster 慧月 2013. 7. 11. 18:23

 subquery expected to return a scalar value but returned multiple rows라는 메세지를 토해내며 페이지를 보여주지 않는 서버;;;


문제가 되는 sql구문을 지정하고 있어서 얼른 찾아가보니;;;; 한 구문의 길이가 몇 줄도 아니고 몇 페이지다;;;;


그래서 일단 복사해서 하나하나 분리해서 확인해보니


decode함수에서 저 에러 메세지를 토해내고 있습니다.


처음에는 에러메세지의 multiple rows의 뜻을 오해해서 해멧다. 잘되던 decode가 당연히 여러 row를 소화해야지 왜 갑자기 안되는지 ㅜㅠ


각설하고 문제를 해결해놓고 보니 어이없다. 아래 쿼리가 문제가 되는 부분입니다.


select decode((select member_gubun from table_member where member_id = a.member_id),'GUBUN01',  a.money, 0 ) alias_money from table_donate a;


쉽게 설명해서 어떤 기금에 멤버들이 주기적 혹은 일시적으로 입금을 한 자료에서 멤버종류별로 합을 구하기 위한 쿼리입니다.

원래는 decode함수 바깥에 sum()함수로 감싸두어 decode()함수로 리턴된 테이블의 합을 구했던 구문이었습니다.


decode함수는 용법이 

decode(칼럼, [검색값, 결과값], 기본값)

입니다.


subquery expected to return a scalar value but returned multiple rows   

이 에러메세지의 multiple rows라는 대목을 저는 서브쿼리에서 반환된 결과값이 multiple rows여서 오류인 것으로 오해했던 것입니다.


그런데, 제가 사용했던 쿼리에서 member_id = a.member_id 항목이 있는데, 값을 가지고 있는 a테이블의 값을 가지고 참조하고자 하는 테이블(table_member)의 member_id로 비교 하고자 하자면, 1:N비교가 되어야 합니다. 그런데, table_member에 있는 member_id가 PK인데도 불구하고 최근 몇달간 몇몇 케이스에서 중복이 되고 있어서 위와 같은 오류메세지를 낸 것입니다.


정리하자면, 서브쿼리 결과 중에 단일값으로 예상되는 부분이 중복값을 가지고(보여주고, 반환하고) 있다라는 메세지로 생각해야 할 듯 합니다.


영어가 짧은 거겠죠.ㅜㅠ



환단고기 - 보급판
국내도서
저자 : 계연수 / 안경전역
출판 : 상생출판 2012.11.07
상세보기


Comments