[DB] MYSQL 서브쿼리 LIMIT 대신 JOIN 으로 변경해서 만들기

미나·2023년 9월 25일

새로알게된 정보

목록 보기
9/23

📌 MYSQL은 서브쿼리에서 LIMIT 사용이 불가능하다.

SELECT a.title, a.body, b.nname, SUM(hit) AS total_hit
FROM article a 
INNER JOIN MEMBER b ON a.mno = b.mno 
WHERE a.ano IN (SELECT ano
		FROM board a 
		INNER JOIN article b ON a.bno = b.bno 
		GROUP BY ano 
		ORDER BY SUM(hit) DESC 
		LIMIT 3)  
GROUP BY a.title, a.body, b.nname 
> 위처럼 코드 작성 시 '오류 코드: 1235 This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery''로 에러 메세지가 뜬다.

📌 LIMIT으로 제한을 두어야할 경우 JOIN을 이용해서 작성하면 된다.

SELECT a.title, a.body, b.nname, SUM(a.hit) AS total_hit
FROM article a 
INNER JOIN MEMBER b ON a.mno = b.mno 
INNER JOIN (
              SELECT d.ano, SUM(d.hit) AS total_hit
              FROM board c 
              INNER JOIN article d ON c.bno = d.bno 
              GROUP BY d.ano 
             ) e ON a.ano = e.ano
GROUP BY  a.title, a.body, b.nname
ORDER BY e.total_hit DESC 
LIMIT 3
> 데이터 join 후 Order by로 서브쿼리의 LIMIT 의 기준을 가져와서 본 쿼리에서 LIMIT으로 제한을 두면 원하는 데이터가 나온다.

0개의 댓글