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
'MySQL' 카테고리의 다른 글
mysql 문자를 숫자로 변환 (0) | 2023.03.16 |
---|---|
[오류] mysql 이모지 com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0... (0) | 2023.03.14 |
mysql mybatis 다중 insert 처리하기 (0) | 2023.03.14 |
mysql 테이블, 컬럼 comment 조회 (0) | 2023.03.14 |
키 열 정보를 반환하지 않는 SelectCommand에 대해서는 UpdateCommand에 대한 동적 SQL 생성이 지원되지 않습니다. - 오류 해결 (0) | 2023.03.13 |