mysql With 사용해서 조회 경험
배경
이벤트 와 기부 정보는 서로 역일 수 있는 key 는 member_id 입니다 이벤트를 참여한 사람의 기부 정보도 보여주고 또한 참여한 이벤트도 보여달라는 요청이 왔습니다
WITH 절
join이 어려운 구조이며 계층적/순차적인 계산하거나 중간 결과 재사용하는 경우
ex) 테이블 간 물리적 외래 키 연결은 없지만 user_id 같은 공통 키로 묶을 수 있는 경우
예시
각 회원별로 총 주문 금액을 알고 싶고, 총액이 1,000 이상인 회원만 보고 싶다.
WITH user_order_totals AS ( SELECT user_id, SUM(price) AS total_amount FROM orders GROUP BY user_id)
SELECT *FROM user_order_totalsWHERE total_amount >= 1000;
문제
문제는 이벤트,이벤트참여정보,이벤트체택정보 3개 테이블을 left join 했더니 member_id 가 복수가 나왔고 기부 정보 또한 늘어나는 문제가 있었습니다
기부도 복수, 이벤트 참여도 복수라면 결과가 곱집합처럼 늘어났다 단순히 join 과 with 으로 해결할 수 없고 더 복잡해졌다
결국 요청한 사용자가 기부를 많이한 기부자나,채택이 된 경우 등 보고 싶은 욕구로 요청이 들어왔기 때문에 나눠서 쿼리 결과를 전달했다
- '2025-03-25' 특정 날짜에 이벤트 참여자 리스트 (채택 여부 확인)
- '2025-03-25' 특정 날짜에 이벤트 참여자의 기부 리스트
- 특정 회원의 기부 리스트