Mysql
Mysql:使用 GROUP_CONCAT 插入 JSON 列類型
我正在嘗試將單詞列表插入到具有以下
JSON
類型的列中:create table my_table ( ... synonyms JSON ... )
我的查詢如下所示:
INSERT into my_table (id, synonyms) SELECT id, GROUP_CONCAT(DISTINCT synonyms) as synonyms from ( SELECT id, name1,name2, GROUP_CONCAT(DISTINCT name1) as synonyms FROM products GROUP BY id UNION SELECT id, name1,name2, GROUP_CONCAT(DISTINCT name2) as synonyms FROM products GROUP BY id ) t group by id;
如果在第一行沒有 INSERT 執行,則該
synonyms
列返回逗號分隔的單詞列表:id name1 name2 synonyms ------------------------------------ 1 one a,b one,a,b 2 two c two,c
我想將這些同義詞插入為 JSON_ARRAY。但是,當單個單詞沒有雙引號時,INSERT 會失敗。如果我在我的選擇中添加 JSON_ARRAY:
SELECT name1,name2,id, JSON_ARRAY(GROUP_CONCAT(DISTINCT synonyms)) ...
我得到以下結果:
name1 name2 synonyms ---------------------------- one a,b ["one,a,b"] two c ["two,c"]
當我想要的是這個(所以它可以直接插入到
synonyms
列中):name1 name2 synonyms ---------------------------- one a,b ["one","a","b"] two c ["two","c"]
有沒有辦法用 SQL 做到這一點,還是在應用程式碼中更好地處理?
使用
JSON_ARRAYAGG
()代替GROUP_CONCAT()
. -秋名它僅在 5.7.22+ 中可用
它有隱含的
DISTINCT
嗎?我不知道……如果沒有,子查詢DISTINCT
會有所幫助。
您可以在
concat
內部添加一個group_concat
來實現這一點,就像在這個範例中一樣:SELECT name1, name2, id, CONCAT( '[', GROUP_CONCAT( CONCAT( '"', synonyms, '"' ) ), ']' )