我正在尝试将单词列表插入到具有以下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
实现此目的,如本例所示:像这样查询
将返回