여러개의 테이블을 JOIN을 하다보니 한개의 값에 여러가지의 수가 있는 사진 및 리뷰같은 칼럼이 들어가게 되면 중복된 데이터 값을 많이 뱉어 내는 현상이 있다. 예를들면
products 테이블

product_options 테이블과

이 있다고 가정을 한다. 프론트쪽에서 원하는 데이터가 예를들어 제품의 이미지, 즉 product_images라고 생각을 하면
product , product_option, product_option_images 총 3개의 테이블을 결합을 해야 한다.
하지만 여기서 결합 후 아무런 조건을 걸지 않는 다면 한개의 제품마다 각각 이미지 한개씩 결합이 되다 보니 정말 많은 양의 데이터가 출력이 된다.
그걸 막기위해서 사진들만 묶어서 객체로 보내는 방법이 두가지가 있다. 썸네일로 활용하기 위해 단 한장만을 원한다고 하면 SELECT DISTINCT기능을 사용 하면 해결이 된다.
일반적인 쿼리문을 살펴보자
SELECT
p.id,
p.name,
c.name categoryName,
po.price,
poi.image_url imageUrl
FROM products p
JOIN categories c ON c.id = p.category_id
JOIN product_options po ON po.product_id = p.id
JOIN product_option_images poi ON poi.product_option_id = po.id
WHERE p.name
LIKE '%?%';
해당 쿼리문을 구현해보면 한개의 사진당 많은 데이터가 중복으로 출력이 된다.
이걸 방지 하려면
SELECT DISTINCT
p.id,
p.name,
c.name categoryName,
po.price,
(SELECT
poi.image_url imageUrl
FROM product_option_images poi
WHERE poi.product_id = po.id
LIMIT 1)
FROM products p
JOIN categories c ON c.id = p.category_id
JOIN product_options po ON po.product_id = p.id
JOIN product_option_images poi ON poi.product_option_id = po.id
WHERE p.name
LIKE '%?%';
이런식으로 DISTINCT LIMIT1 을 걸어주면 단 한장만의 사진만 전송이 되어 중복 데이터 출력을 방지해 준다