[mysql] group_concat 업데이트 0 3 1,451

by 후룰쭈쭈빠레로 [MySQL] group_concat [2017.03.28 09:51:14]


결과.JPG (47,302Bytes)

tb_l_vtx의 테이블에 l_code값이 여러게 존재합니다. 그래서 컬럼을 추가하여 같은 l_code값끼리 콤마 인자로 업데이트 하려고합니다

그래서

SELECT l_code, group_concat(tb_l_vtx.x_wg)	FROM tb_l_vtx where l_code = l_code GROUP BY l_code;

 위와같이 쿼리를 실행하여 그림과 같이 결과를 얻었습니다.

이후 하나의 컬럼을 추가(x_wg_re)하여 선택된 값들을 추가하기 위하여 아래와 같은 쿼리로 실행하였는데  오류(Error Code: 1064)가 되었습니다. 

UPDATE TB_L_VTX SET X_WG_RE = SELECT group_concat(x_wg separator ',') FROM tb_l_vtx  WHERE L_CODE = L_CODE GROUP BY l_code;

업데이트 문의 무엇이 문제일까요? 

by 마농 [2017.03.28 10:15:11]

1. 조회 쿼리 문제점
  - 쓸데 없는 조건이 있네요.
  - where l_code = l_code
2. 갱신 쿼리 문제점
  - 문법이 틀린 것도 문제입니다만.
  - 업데이트 의도가 맞는지 의문입니다.
  - 동일 코드에 여러 값이 있어서 Group by 하여 합친 것인데
  - 합친 값을 여러 행에 동일하게 업데이트 하는게 맞는지요?
  - 동일 테이블 업데이트가 아닌 신규 테이블에 인서트 해야 하는게 아닌지?


by 후룰쭈쭈빠레로 [2017.03.28 10:32:19]

1. 조회 쿼리 문제점 

 - where절을 넣는것은 불필요한것으로 실행되었습니다. 

2. 갱신쿼리 문제점

 - 합친값을 여러행에 동일하게 업데이트 하려고 합니다. 

 - 저의 의도는 동일 테이블에 컬럼 추가하여 합친 값을 넣으려고합니다. 만약, 신규 테이블에 인서트 하려고 하면

creat table vtx(신규테이블명) as (SELECT a.l_code, a.group_concat(a.x_wg)  FROM tb_l_vtx as a GROUP BY a.l_code)

이렇게 실행 후 하면 되는건가요?


by 마농 [2017.03.28 10:49:14]

조인 없데이트 시도해 보시구요.
혹시 safe update 관련 오류가 난다면?
SET sql_safe_updates = 0; 하신 후에 다시 시도해 보세요.

-- 1. 조인 업데이트
UPDATE tb_l_vtx a
 INNER JOIN
       (SELECT l_code
             , GROUP_CONCAT(x_wg ORDER BY seq_vtx) x_wg_re
             , GROUP_CONCAT(y_wg ORDER BY seq_vtx) y_wg_re
          FROM tb_l_vtx
         GROUP BY l_code
        ) b
    ON a.l_code = b.l_code
   SET a.x_wg_re = b.x_wg_re
     , a.y_wg_re = b.y_wg_re
;
-- 2. 신규테이블 생성
SELECT l_code
     , GROUP_CONCAT(x_wg ORDER BY seq_vtx) x_wg_re
     , GROUP_CONCAT(y_wg ORDER BY seq_vtx) y_wg_re
  FROM tb_l_vtx
 GROUP BY l_code
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입