MySQL2023. 3. 14. 16:22
728x90
반응형
SMALL

서브쿼리로 여러 행이 나올때, 이 값들을 한컬럼으로 정렬해서 보여주고 싶을 수 있다.

그럴때 group_concat 함수를 쓰는데, 오라클에서쓰는 LISTAGG의 개념이라고 보면 되겠다.

deer 테이블과 deer_son 테이블을 놓고 예를 들어보면..

DEER 테이블)

DEER_KEY가 PK임

DEER_KEY
NAME
AGE
1
큰 사슴
33
2
성격 나쁜 사슴
31

 

 

DEER_SON 테이블)

 

DEER_KEY
DEER_SON_KEY
NAME
AGE
1
1
큰 사슴 아들1
1
1
2
큰 사슴 아들2
2
1
3
큰 사슴 아들3
5
2
1
성격 나쁜 사슴 아들 1
17
2
2
성격 나쁜 사슴 아들 2

 

 

DEER와 DEER_SON 테이블의 관계가 1:N이고,

이런식으로 내 아들 이름들을 서브쿼리로 가져오면 1개가 넘는 행이 리턴되었다며

Subquery return record than 1 multiple rows..?

뭐 이런 메시지가 나오면서

오류가 날 것이다.

 

 

오류 쿼리)

 

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. 오류

 

 

이럴때 SON_NAME을 group_concat을 써서 한 컬럼으로 모아서 보여줄 수 있다.

 

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로 준 ','로 나누어져 한 컬럼으로 담길 수 있다.

요긴하게 써먹을데가 많을것'-'!

 

728x90
반응형
LIST
Posted by 사슴영혼'-'