본문 바로가기
Error

[Error] more than one row returned by a subquery used as an expression 해결방법

by GoodDayDeveloper 2022. 10. 27.
반응형

 

SQL에서 select절 서브쿼리를 진행하던중에 에러가 발생하였습니다.

 

more than one row returned by a subquery used as an expression

 

'표현식으로 사용되는 하위 쿼리에서 반환된 둘 이상의 행' 이라는 에러입니다.

빠르게 정리해보죠!!

 

 

 

 

 

 

 

원인

 

 

 

일단 제 쿼리와 결과는 이렇습니다.

 

 

1
2
3
4
5
6
7
8
select 
  *
from 
  class
group by 
  mt_idx
 
cs

 

 

 

 

위와 같이 14개의 행이 출력되는 쿼리에서

 

 

 

1
2
3
4
5
6
7
8
select 
  *
  ,(SELECT d.time FROM chart AS d WHERE a.idx = d.idx ) AS time
from 
  class
group by 
  mt_idx
 
cs

 

 

서브쿼리 추가하였더니 에러가 발생한 현상입니다.

 

 

 

 

 

 

 

 

SELECT d.time FROM chart 의 조회결과는 15,000개가 나오는데 14행에 서브쿼리를 넣으려고 하니 

에러 표현식 그대로 '표현식으로 사용되는 하위 쿼리에서 반환된 둘 이상의 행' 이 나타난겁니다.

 

 

 

결국 행의 차이로 인한 에러입니다.

서브쿼리의 결과값도 기존 쿼리의 결과 값(14개)과 맞춰줘야합니다.

 

 

 

 

 

반응형

 

 

 

 

 

해결방법

 

 

 

기존 쿼리에서 GROUP BY 를 해줬기 때문에 서브쿼리에서도 중복제거를 해줘야합니다.

 

 

1
2
3
4
5
6
7
8
select 
  *
  ,(SELECT DISTINCT d.time FROM chart AS d WHERE a.idx = d.idx ) AS time
from 
  class
group by 
  mt_idx
 
cs

 

 

DISTINCT를 선언해주거나

 

 

 

 

1
2
3
4
5
6
7
8
select 
  *
  ,(SELECT d.time FROM chart AS d GROUP BY d.time HAVING a.idx = d.idx ) AS time
from 
  class
group by 
  mt_idx
 
cs

 

GROUP BY / HAVING 을 사용해줘서 중복을 제거합니다.

 

 

 

more than one row returned by a subquery used as an expression 에러가 발생하면

행의 차이로 인한 에러이니, 이 점을 확인하면 도움이 되지 않을까 생각합니다.

 

 

 

반응형

댓글