블로그

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

Code › Database (DB) · 2022-02-20 · 공개

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 '

#039;    )
) as items
ORDER BY items.item;  # 정렬

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

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

SELECT JSON_KEYS( JSON_OBJECTAGG( item, "" ) )
FROM JSON_TABLE( @json, '$[*]' 
    COLUMNS(    item TEXT PATH '

#039;   )
) as items;

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

< 특정값만 삭제 >

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

 

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

#039;)) AS jt   WHERE element <> 2;

 

 

    - 테이블에 적용 query

UPDATE my_table SET json1 = ( SELECT JSON_ARRAYAGG(element) FROM JSON_TABLE(json1, '$[*]' COLUMNS (element INT PATH '

#039;)) 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

알림

    ) \u003cbr/\u003e) as items \u003cbr/\u003eORDER BY items.item;  # 정렬 \u003cbr/\u003e\u003cbr/\u003e//------------------------------------- \u003cbr/\u003e* JSON 배열 합치고 \u003cstrong\u003e중복값 제거\u003c/strong\u003e(unique, distinct)\u003cbr/\u003e    - \u003cstrong\u003eJSON_\u003cspan style=\"color: #ee2323\"\u003eOBJECT\u003c/span\u003eAGG   와 JSON_KEYS 이용\u003c/strong\u003e \u003cbr/\u003e    - 주의!  JSON_KEYS 의 결과의 각 요소는 문자열 형태 \u003cbr/\u003e\u003cbr/\u003eSET @json = '[\"a\", \"b\", \"b\", \"a\", \"c\"]'; \u003cbr/\u003e\u003cbr/\u003eSELECT \u003cstrong\u003eJSON_KEYS\u003c/strong\u003e( \u003cspan style=\"color: #000000\"\u003e\u003cstrong\u003eJSON_OBJECTAGG\u003c/strong\u003e\u003c/span\u003e( item, \"\" ) ) \u003cbr/\u003eFROM \u003cstrong\u003eJSON_TABLE\u003c/strong\u003e( @json, '$[*]'  \u003cbr/\u003e    COLUMNS(    item TEXT PATH '    ) \u003cbr/\u003e) as items; \u003cbr/\u003e\u003cbr/\u003e//-----------------------------------------------------------------------------\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e\u0026lt; \u003cstrong\u003e특정값만 삭제\u003c/strong\u003e \u0026gt;\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e예) [1,2,3] 에서 2만 삭제\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e \u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003eSET @json = '[1,2,3]'; \u003cbr/\u003eSELECT JSON_ARRAYAGG(element) FROM JSON_TABLE(@json, '$[*]' COLUMNS (element INT PATH ' )) AS jt   WHERE element \u0026lt;\u0026gt; 2;\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e \u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e \u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e    - 테이블에 적용 query\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003eUPDATE my_table SET json1 = ( SELECT JSON_ARRAYAGG(element) FROM JSON_TABLE(json1, '$[*]' COLUMNS (element INT PATH ' )) AS jt   WHERE element \u0026lt;\u0026gt; 2 ) WHERE id = 1;\u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e \u003c/p\u003e\n\u003cp data-ke-size=\"size16\"\u003e\u003cbr/\u003e\u003cbr/\u003e//------------------------------------- \u003cbr/\u003e\u003ca href=\"https://stackoverflow.com/questions/58051995/how-to-get-unique-distinct-elements-inside-json-array-in-mysql-5-7\" rel=\"noopener noreferrer\"\u003ehttps://stackoverflow.com/questions/58051995/how-to-get-unique-distinct-elements-inside-json-array-in-mysql-5-7\u003c/a\u003e \u003cbr/\u003e\u003ca href=\"https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\" rel=\"noopener noreferrer\"\u003ehttps://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html\u003c/a\u003e \u003cbr/\u003e\u003ca href=\"https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html\" rel=\"noopener noreferrer\"\u003ehttps://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html\u003c/a\u003e \u003cbr/\u003e\u003cbr/\u003e\u003c/p\u003e\n\u003c/div\u003e","isPublic":true},"categories":[{"id":"AI","name":"AI","parentId":""},{"id":"Code","name":"Code","parentId":""},{"id":"Code/Python","name":"Python","parentId":"Code"},{"id":"Code/JavaScript","name":"JavaScript","parentId":"Code"},{"id":"Code/PHP","name":"PHP","parentId":"Code"},{"id":"Code/Web","name":"Web","parentId":"Code"},{"id":"Code/Database (DB)","name":"Database (DB)","parentId":"Code"},{"id":"Code/Mobile","name":"Mobile","parentId":"Code"},{"id":"Code/C#","name":"C#","parentId":"Code"},{"id":"Code/Desktop","name":"Desktop","parentId":"Code"},{"id":"Music","name":"Music","parentId":""},{"id":"Music/Crush","name":"Crush","parentId":"Music"},{"id":"Music/Playing","name":"Playing","parentId":"Music"},{"id":"Cine","name":"Cine","parentId":""},{"id":"IT","name":"IT","parentId":""},{"id":"Gears","name":"Gears","parentId":""},{"id":"Tips","name":"Tips","parentId":""},{"id":"헤아림","name":"헤아림","parentId":""},{"id":"Etc","name":"Etc","parentId":""},{"id":"Etc/Atelier","name":"Atelier","parentId":"Etc"},{"id":"Etc/History","name":"History","parentId":"Etc"},{"id":"Etc/Graphic","name":"Graphic","parentId":"Etc"}],"snapshot":null,"revision":3075}}