没有直接的方法可以从 MySQL 中的 JSON 数组中获取不同的值。一种方法可能是利用序列/数字生成器表概念 https://stackoverflow.com/a/58032575/2469308。该序列表可以用作派生表(子查询),或者您可以创建一个在数据库中存储数字的永久表。
然后我们将使用这个序列表JSON_EXTRACT() https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html#function_json-extract从第一个键、第二个键、第三个键等处的数组中取出值。一旦我们提取出单独行中的值,我们就可以简单地使用DISTINCT
从中获得独特的价值。之后我们可以使用JSON_ARRAYAGG() https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_json-arrayagg函数将这些唯一值重新聚合回 JSON 数组。
架构(MySQL v5.7)
SET @json = '["a", "b", "b", "a", "c"]';
Query
SELECT Json_arrayagg(dt.val) AS unq_json_array
FROM (SELECT DISTINCT Json_extract(@json, Concat('$[', seq.n, ']')) AS val
FROM (SELECT 0 AS n UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5 UNION ALL
SELECT 6 UNION ALL SELECT 7 UNION ALL
SELECT 8 UNION ALL SELECT 9) AS seq) AS dt
WHERE dt.val IS NOT NULL;
Result
| unq_json_array |
| --------------- |
| ["a", "b", "c"] |
在 DB Fiddle 上查看 https://www.db-fiddle.com/f/mUyKpViMcGuVdMBNDrHWQr/0