SQL Subquery returns more than 1 row 질문드립니다.
A B C
============
111 100 11
222 140 12
111 130 13
333 200 14
111 400 15
222 300 16
111 230 17
이 테이블을
다음과 같이
A B C
============
111 400 15
222 300 16
333 200 14
이 테이블을
다음과 같이
아래 코드로 해결 했는데 문제는 같은 그룹에 B 값이 동일한 레코드가 존재하면 Subquery returns more than 1 row 에러가 납니다.
55글자 더 채워주세요.
1개의 답변이 있어요!
"문제는 같은 그룹에 B 값이 동일한 레코드가 존재하면 Subquery returns more than 1 row 에러가 납니다."
네 맞습니다.
"Subquery returns more than 1 row" 에러는 말 그대로 서브쿼리에서 1개를 넘는 로우가 반환되면 발생하는 에러입니다. 이 경우 해답은 정말 간단합니다. 서브쿼리에서 반환되는 로우를 1개로 만드는 조건을 더 넣으시면 됩니다.
현재 쿼리는 아래와 같이 사용중이신데요.
SELECT a,b,(SELECT c FROM aaa WHERE a1.a=a and a1.b=b) FROM ( SELECT a, max(b) as b FROM aaa GROUP BY a ) a1이 경우 "SELECT c FROM aaa WHERE a1.a=a and a1.b=b" 서브쿼리 부분에서 aaa Table에 해당하는 조건이 여러개인 경우 한개만 받으시면 됩니다.
예를들어 반환되는 c가 이중에 무엇이던 상관이 없으시다면 아래와 같이 작업하시면 되겠습니다.
SELECT a,b, -- (SELECT c FROM aaa WHERE a1.a=a and a1.b=b limit 1 : mysql인 경우 ) -- (SELECT c FROM aaa WHERE a1.a=a and a1.b=b and rownum = 1 : oracle 인 경우 ) FROM ( SELECT a, max(b) as b FROM aaa GROUP BY a ) a1
또한 c가 반환되는것중에 따로 조건이나 정렬이 필요하시면 각자 limit / rownum 전에 and 조건으로 더 조건을 주시면 됩니다^^