본문 바로가기

Developer/DataBase

MySQL 5.7 doens't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

현재 mysql 5.7.26 버전 사용중.

SELECT VERSION();

 

위의 버전에서는 LIMIT 이 포함된 서브쿼리를 지원하지 않는 것으로 확인하였다.

SELECT  *
FROM `test_table`
WHERE `number` IN (SELECT DISTINCT `number` FROM test_table LIMIT 5);

위와 같이 LIMIT 이 포함된 서브쿼리가 있는 쿼리를 실행시키면 아래와 같이 에러가 발생한다.

 

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

 

이 때, 위의 쿼리를 직접 사용할 수는 없지만 임시테이블을 사용하여 쿼리를 사용할 수 있다.

SELECT `number`
FROM `test_table`
WHERE `number` IN (SELECT * 
                   FROM (SELECT DISTINCT `number` 
                   		 FROM test_table 
                         LIMIT 5) as t );

위와 같이 LIMIT 쿼리가 포함된 쿼리로 임시 테이블을 생성하도록하면 LIMIT 이 포함된 쿼리도 서브 쿼리로 사용 가능하다.

그리고 alias를 사용하는부분도 필수이다. ('as t' 를 사용한 곳)

'Developer > DataBase' 카테고리의 다른 글