mysql group_concat은 여러 행의 데이터를 하나의 열로 반환합니다.

하위 쿼리가 여러 행을 생성하는 경우 하나의 열로 정렬된 값을 표시할 수 있습니다.

~의

그럴 때 사용하는 것이 group_concat 함수인데, 이는 오라클에서 사용하는 LISTAGG의 개념이라고 할 수 있습니다.

~의

예를 들어 deer 테이블과 deer_son 테이블을 사용하면…

~의

~의

사슴 테이블)

DEER_KEY는 PK입니다.

사슴_키
이름
나이
하나
엘크
33
2
심술 궂은 사슴
31

DEER_SON 테이블)

사슴_키
DEER_SON_KEY
이름
나이
하나
하나
큰 사슴 아들 1
하나
하나
2
큰 사슴 아들 2
2
하나
큰 사슴 아들 3
5
2
하나
언짢은 사슴 아들 1
17
2
2
언짢은 사슴 아들 2

DEER와 DEER_SON 테이블 간의 관계는 1:N이며,

이렇게 해서 서브 쿼리에 아들 이름을 넣으면 1개 이상의 행이 반환된다.

하위 쿼리는 1행 이상의 레코드를 반환합니다.

.?

무슨 소식이야

오류가 발생합니다.

~의

오류 쿼리)

SELECT A.DEER_KEY, A.NAME, A.AGE,
       (SELECT B.NAME FROM DEER_SON B WHERE B.DEER_KEY = A.DEER_KEY) AS SON_NAME
FROM DEER A

-- 결과X. 오류

이 경우 group_concat을 사용하여 SON_NAME을 열로 표시할 수 있습니다.

SELECT A.DEER_KEY, A.NAME, A.AGE,
       (SELECT GROUP_CONCAT(B.NAME SEPARATOR ',') FROM DEER_SON B WHERE B.DEER_KEY = A.DEER_KEY) AS SON_NAME
FROM DEER A

-------------------------------
--쿼리 결과 

DEER_KEY     NAME     AGE    SON_NAME
1            큰 사슴   33      큰 사슴 아들1, 큰사슴 아들2

SEPARATOR에 의해 ‘,’로 구분되어 하나의 열에 포함될 수 있습니다.

‘-‘를 쓸 수 있는 유용한 곳이 많을 거에요!