디버깅 다이어리

Mysql subquery 오류

`SELECT userId, nickname, profileImg
        FROM Users
        LIMIT ${start},${limit}
        WHERE userId = (SELECT followerUserId FROM Follows where followUserId = ${userId})`

위와 같은 query 문에서 두가지 오류가 있었다.

첫째는 LIMIT를 마지막에 적어줘야 한다는 것이다.

LIMIT는 데이터 검색이 다 되고 그 결과값 중에 출력할 범위를 지정한다.

따라서 제일 마지막에 있는 것이 맞다.

두번째는 userId를 =으로 비교해준 것이다.
=은 일대일 비교인데 SELECT followerUserId FROM Follows where followUserId = ${userId} 문은 결과로 여러줄의 튜플을 가져온다.
따라서 비교연산자 =은 부적절하다. = 대신 IN을 써준다.

위 코드를 제대로 고쳐보면 다음과 같다.

`SELECT userId, nickname, profileImg
        FROM Users
        WHERE userId IN (SELECT followerUserId FROM Follows where followUserId = ${userId})
        LIMIT ${start},${limit}`