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;
업데이트 문의 무엇이 문제일까요?
1. 조회 쿼리 문제점
- 쓸데 없는 조건이 있네요.
- where l_code = l_code
2. 갱신 쿼리 문제점
- 문법이 틀린 것도 문제입니다만.
- 업데이트 의도가 맞는지 의문입니다.
- 동일 코드에 여러 값이 있어서 Group by 하여 합친 것인데
- 합친 값을 여러 행에 동일하게 업데이트 하는게 맞는지요?
- 동일 테이블 업데이트가 아닌 신규 테이블에 인서트 해야 하는게 아닌지?
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)
이렇게 실행 후 하면 되는건가요?
조인 없데이트 시도해 보시구요.
혹시 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
;