Code/Database (DB)

[mysql] JSON 배열 합치기 & 중복값 제거, 특정값만 삭제

codens 2022. 2. 20. 22:18



JSON ARRAY 합치기


//-------------------------------------
* JSON 배열  합치기만
    - JSON_ARRAYAGG  이용
    - JSON_TABLE 을 사용하지 않으면 
        - "[1,2]" , "[2,3]"  를 합치면 => "[[1,2], [2,3]]" 으로 결과가 나옴
        - 원하는 결과는 "[1,2,2,3]"


SET @json = '["a", "b", "b", "a", "c"]';

SELECT  JSON_ARRAYAGG( item ) )
FROM JSON_TABLE( @json, '$[*]'
    COLUMNS(     item TEXT PATH '$'    )
) as items
ORDER BY items.item;  # 정렬



//-------------------------------------
* JSON 배열 합치고 중복값 제거(unique, distinct)
    - JSON_OBJECTAGG   와 JSON_KEYS 이용
    - 주의!  JSON_KEYS 의 결과의 각 요소는 문자열 형태

SET @json = '["a", "b", "b", "a", "c"]';

SELECT JSON_KEYSJSON_OBJECTAGG( item, "" ) )
FROM JSON_TABLE( @json, '$[*]' 
    COLUMNS(    item TEXT PATH '$'   )
) as items;

//-----------------------------------------------------------------------------

< 특정값만 삭제 >

예) [1,2,3] 에서 2만 삭제

 

SET @json = '[1,2,3]';
SELECT JSON_ARRAYAGG(element) FROM JSON_TABLE(@json, '$[*]' COLUMNS (element INT PATH '$')) AS jt   WHERE element <> 2;

 

 

    - 테이블에 적용 query

UPDATE my_table SET json1 = ( SELECT JSON_ARRAYAGG(element) FROM JSON_TABLE(json1, '$[*]' COLUMNS (element INT PATH '$')) AS jt   WHERE element <> 2 ) WHERE id = 1;

 



//-------------------------------------
https://stackoverflow.com/questions/58051995/how-to-get-unique-distinct-elements-inside-json-array-in-mysql-5-7
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html


반응형