아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
탈퇴한 사용자
탈퇴한 사용자19.08.28

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 에러가 납니다.


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



55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • 하얀고슴도치236
    하얀고슴도치23619.08.28

    "문제는 같은 그룹에 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 조건으로 더 조건을 주시면 됩니다^^