[MySQL] GROUP_CONCAT ์ฌ์ฉ๋ฒ
๐ก GROUP_CONCAT ๋ช ๋ น์ด
SELECT ์ ๊ฒฐ๊ณผ๋ก ๋์จ ์ฌ๋ฌ ํ์ ํน์ ์ปฌ๋ผ์ ํ์ค๋ก ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ค. (NULL ๊ฐ์ ์ ์ธ)
๐ก ์ฌ์ฉ๋ฐฉ๋ฒ
GROUP_CONCAT([DISTINCT][expr, column][ORDER BY column DESC][SEPARATOR '๊ตฌ๋ถ์'])
๐ก ์ฌ์ฉ์์
์ฌ์ฉ์ ํ ์ด๋ธ์ ์ฌ์ฉ์์ ์ด๋ฉ์ผ๊ณผ ๋ฒํธ ์ปฌ๋ผ์ด ์๋ค. ์ฌ๋ฌ๊ฐ์ ์ด๋ฉ์ผ๊ณผ ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฉ์ผ๊ณผ ๋ฒํธ์ ํ ์ด๋ธ์ ๊ฐ๊ฐ ๋ฐ๋ก ๋ง๋ค์ด ์ฌ์ฉ์ ํ ์ด๋ธ๊ณผ ์ฐธ์กฐํ๋๋ก ํด์ฃผ์๋ค. ์ฌ์ฉ์๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ์์ ์ด๋ฉ์ผ๊ณผ ๋ฒํธ๋ฅผ ์ ๋ถ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ด๋ฉ์ผ๊ณผ ๋ฒํธ์ ํ ์ด๋ธ์์ ์กฐํํ ๊ฐ์ ๊ตฌ๋ถ์ :: ๋ก ํฉ์ณ ์ถ๋ ฅํ๋๋กํ์๋ค.
๊ท์ฐฎ์ผ๋๊น ํธ๋ํฐ ๋ฒํธ ํ ์ด๋ธ๊ณผ ํ์ ํ ์ด๋ธ๋ง ๋ง๋ค์ด์ ์คํํ๊ฒ ๋ค.
CREATE TABLE `member` (
`member_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id` varchar(50) NOT NULL,
`pw` varchar(50) NOT NULL
);
CREATE TABLE `phone` (
`phone_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`member_id` INT NOT NULL,
`phone_number` TEXT NOT NULL,
FOREIGN KEY (`member_id`) REFERENCES `member` (`member_id`) ON DELETE CASCADE
);
๋ฐ์ดํฐ ๊ฐ์ ์ง์ด๋ฃ์ด์ค๋ค.
INSERT INTO member(id, pw) values('id1', '1234');
INSERT INTO member(id, pw) values('id2', '1234');
INSERT INTO member(id, pw) values('id3', '1234');
INSERT INTO member(id, pw) values('id4', '1234');
INSERT INTO member(id, pw) values('id5', '1234');
INSERT INTO phone(member_id, phone_number) values('1', '010-1224-4545');
INSERT INTO phone(member_id, phone_number) values('2', '010-4535-3535');
INSERT INTO phone(member_id, phone_number) values('2', '010-0245-5475');
INSERT INTO phone(member_id, phone_number) values('4', '010-5566-3634');
INSERT INTO phone(member_id, phone_number) values('5', '010-8863-2052');
INSERT INTO phone(member_id, phone_number) values('5', '010-0747-7899');


select
m.id,
m.pw,
(select group_concat(phone_number separator '::')
from phone
where member_id = m.member_id
group by member_id) as phone
from member as m;

๊ตฌ๋ถ์๋ก ์ฐ๊ฒฐ์ด ๋์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ฒ์ํ ๊ฐ์ ๊ณณ์์ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๊ฒฝ์ฐ์ ์ด๋ ๊ฒ ๋ฝ์์ ๊ตฌ๋ถ์๋ก ๋ค์ ๋๋์ด์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค.