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

* JSON 값 합치기

 

    - JSON Function Reference

https://dev.mysql.com/doc/refman/8.0/en/json-function-reference.html



    JSON_MERGE_PATCH 

        - 뒤의 값을 덮어씀

 

    JSON_MERGE_PRESERVE

        - 합침

        - 주의! null 값과 합쳐지면 무조건 null 리턴

 

    JSON_MERGE() (deprecated)

 

set @col1 = '[1,2]';

set @col2 = '[2,3]';

 

JSON_MERGE_PATCH(@col1, @col2) = [2, 3] 

JSON_MERGE_PATCH(@col2, @col1) = [1, 2]    

JSON_MERGE_PRESERVE(@col1, @col2) = [1, 2, 2, 3]    

JSON_MERGE_PRESERVE(@col2, @col1 = [2, 3, 1, 2]



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

    - 집합 함수

https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_json-arrayagg

JSON_ARRAYAGG

 

JSON_OBJECTAGG



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

* 합치고 중복값 없애기

 

SELECT t1.*,  (아래 수식으로 대체)

FROM test1 AS t1 , JSON_TABLE(

   JSON_MERGE_PRESERVE( t1.json2, t1.json1 ),

  '$[*]' COLUMNS (

    item VARCHAR(255) PATH '$'

  )

) AS jt

GROUP BY t1.id;



    - 수식

JSON_ARRAYAGG( jt.item) => ["2", "3", "1", "2"]

    - 중복 제거 X , 순서는 O(유지)

    

 

JSON_KEYS( JSON_OBJECTAGG( jt.item, '') )  => ["a", "b", "c", "d"]

    - 중복 제거 O , 순서는 X(유지안됨) , null 이 있으면 에러

    

 

CONCAT( '[', GROUP_CONCAT(DISTINCT jt.item  ), ']') => [a,b,c,d]

CONCAT( '["', GROUP_CONCAT(DISTINCT jt.item separator '", "' ), '"]') => ["a", "b", "c", "d"]

    - 중복 제거 O , 순서는 X(유지안됨) 



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

// 참고

stackoverflow.com/questions/57529216/mysql-how-can-i-merge-two-json-arrays-of-strings-without-duplicates

 

 

Posted by 코덴스

댓글을 달아 주세요