반응형

Mysql를 사용하다 보면 단일행에 대하여 참고하는 테이블의 데이터가 다중행일 경우가 있습니다.

이러한 경우 join문을 통해 데이터를 조회하게 되면 아래와 같이 다중행으로 출력됩니다.

1번 게시물 파일1
1번 게시물 파일2
1번 게시물 파일3
1번 게시물 파일4
1번 게시물 파일5

 

다중 데이터를 group_concat 메소드를 활용하여 조회 결과를 단일행으로 변경하는 방법을 알아보겠습니다.

1번 게시물 파일1, 파일2, 파일3, 파일4, 파일5

 

 

GROUP_CONCAT

select
    group_concat(column)
from table;

단순하게 다중에서 단일로 묶고자 하는 컬럼을 group_concat 메소드 파라미터로 처리하면 됩니다.

아래는 사용 예제입니다.

 

group_concat 사용 예제

아래와 같은 2개의 테이블 있다고 가정하겠습니다.

table : board
table : file_info

board테이블은 게시판을 나타내는 테이블이며, file_info는 board테이블에 대한 파일 정보를 담고 있는 테이블입니다.

file_info테이블의 board_idxboard테이블의 idx값을 참조합니다.

 

select
    a.*,
    group_concat(b.file_idx, b.file_name SEPARATOR '|')    
from(
    select
        *
    from board
    limit 0, 10 #paging처리
) a
left outer join file_info b
on a.idx = b.board_idx
group by a.idx;

 

board 테이블에서 10개의 데이터를 먼저 가져오고, 해당 데이터를 a라고 별칭을 처리하고 file_info테이블의 참조컬럼을 join합니다.

group_concat을 통해 각각 파일에 대한 idx값인 file_idx컬럼과 file_name컬럼을 붙여서 출력합니다.

SEPARATOR 키워드는 이름 그대로 구분자를 지정할 수 있습니다. 부득이한 상황으로 쉼표 구분자를 사용할 수 없다면 해당 키워드를 추가하여 구분값을 변경해주세요. SEPARATOR 키워드가 없으면 기본값인 쉼표로 구분처리 됩니다.

 

 

조회 결과

반응형