[MySQL] ERROR 1242 (21000) : Subquery resturns more than 1 row


problem 테이블과 stat 테이블이 있다. 각 테이블들에 대한 설명을 하자면 problem 테이블은 각 문제에 대한 내용, 내용 언어, 보기를 보여주고, stat 테이블은 어떤 사람이 해당 문제에 어떤 보기를 골랐는지를 보여주는 테이블이다. 필자는 stat 테이블의 결과값으로 problem 테이블의 값을 조회할 수 있는지가 궁금했다. 예를 하나 들어보자면

select id from stat where ex=’milk’를 하면 drink가 반환되는 것을 확인할 수 있다. 이를 이용해 select language from problem where id=’drink’; 대신에 select language from problem where id=(select id from stat where ex=’milk’);로 대체되는지가 궁금했다. 그래서 실제로 해봤더니

2개 모두 english를 반환했다. 즉, 어떤 특정값 대신 서브쿼리를 이용할 수도 있다는 것이다. 그런데, 똑같은 원리로 select language from problem where id=(select id from stat where ex=’water’);로 했더니

Subquery returns more than 1 row라는 에러가 떴다. 이를 해석해보면 서브쿼리가 1줄 보다 더 많은 결과를 반환했다는 뜻이다. 실제로 저 서브쿼리를 실행해보면

이렇게 3개의 결과값이 반환된다. 반면에 이전에 했던 select id from stat where ex=’milk’는

1개의 결과값만이 반환된다. 그래서 서브쿼리가 잘 실행됐던 것이다. 그러면 2개 이상의 결과값이 반환되면 서브쿼리를 실행할 수 없는걸까? 아니다. 이 때 서브쿼리 앞에 ANY를 붙여주면 된다.

select language from problem where id=ANY(select id from stat where ex=’water’);

이렇게 서브쿼리가 잘 실행됨을 확인할 수 있다.


이전글: 비트(bit)와 바이트(Byte) 다음글: Docker 설치 및 컨테이너 실행