본문 바로가기

Story/mysql

string split 구분자로 저장된것을 다른 테이블과 join

반응형
ex )
select
SQL_CALC_FOUND_ROWS
pm.*,
count(b.b_no) as cnt
from
product_month pm
left outer join books b
on  concat(',',pm.pm_books_list,',' ) like
concat('%,',b.b_no,',%' )
where
pm.p_id = 1
group by pm.p_id, pm.pm_no
order by
pm.pm_no asc

위의 query 문의 설명을 하자면
pm.pm_books_list 에 저장된 값이 "1,2,3,4" 와 같은 문자열로 되어있다
join 되는 books 테이블의 key 인 b_no 값들을 pm_books_list 에 저장된 값과 비교하는것이다.
b_no 값을 ",키값," 형태로 바꾸고 비교대상인 pm_books_list 값도 ",," 형태로 바꿔 결국 ",값," 과 ",값," 값을 비교 하도록 한것이다.
성능면에선 다소 떨어지겠지만 부득이하게 이와 같은 형태로 저장될경우 join 하는 방법을 찾아 보았다.

위의 문장을 다시 설명하면 특정 과정에 속한 여러 교재가 있는대 그 교재 목록을 하나의 필드에 "," 로 구분하여 저장을 하고 해당 교재 정보를 조인하여 가지고 오는것이다.

하나의 필드와 여러 row 를 조인하는것이다.
반응형