본문 바로가기
MySql

MySQL-UNION ALL 및 GROUP BY로 검색

by 베이스 공부 2020. 11. 3.
반응형
SELECT p.id, p.title, p.uri, 'post' AS search_type
FROM `posts` AS p 
WHERE title LIKE "%logo%" 

UNION ALL 

SELECT p.id, p.title, p.uri, 'tag' AS search_type
FROM posts AS p 
INNER JOIN post_tags AS pt ON pt.post_id = p.id 
INNER JOIN tags AS t ON pt.tag_id = t.id 
WHERE t.title LIKE "%logo%"

UNION ALL

SELECT p.id, p.title, p.uri, 'category' AS search_type
FROM posts AS p 
INNER JOIN post_categories AS pc ON pc.post_id = p.id 
INNER JOIN categories AS c ON pc.category_id = c.id 
WHERE c.title LIKE "%logo%"

GROUP BY p.id
LIMIT 30

중복 검색 결과를 반환하지 않도록 게시물 ID를 그룹화하려고하는데, 어떤 이유로 GROUP BY p.id 를 사용하더라도 중복이 발생합니다. 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?

 

해결 방법

 

GROUP BY 는 쿼리의 세 번째 부분의 결과 만 그룹화합니다. 먼저 GROUP이되고 UNION이됩니다.

전체 쿼리를 하위 쿼리와 GROUP으로 묶습니다.

 

참조 페이지 https://stackoverflow.com/questions/3901995

 

 

반응형

댓글