mysql - 如何在 MySQL 5.7 中的 JSON 数组中获取唯一/不同的元素

标签 mysql sql arrays json mysql-5.7

我有一个带有一些 JSON 列的非规范化表的 mysql 5.7。我需要为数组列提取每行唯一/不同的值。

例如:["a", "b", "b", "a", "c"]预期输出应为 ["a", "b", "c"];SET @json = '["a", "b", "b", "a", "c"]';我需要在此列表中获取唯一值。
["a", "b", "c"];

最佳答案

没有直接的方法可以从 MySQL 的 JSON 数组中获取不同的值。一种方法可以是 utilize a Sequence/Number Generator table concept .此序列表可以用作派生表(子查询),或者您可以在数据库中创建一个存储数字的永久表。

然后我们将使用这个序列表来 JSON_EXTRACT() 从第一个键、第二个键、第三个键等处的数组中取出值。一旦我们提取了单独行中的值,我们可以简单地使用 DISTINCT从中获得独特的值(value)。之后,我们可以使用 JSON_ARRAYAGG() 函数将这些唯一值重新聚合为 JSON 数组。

架构 (MySQL v5.7)

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

查询
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;

结果
| unq_json_array  |
| --------------- |
| ["a", "b", "c"] |

View on DB Fiddle

关于mysql - 如何在 MySQL 5.7 中的 JSON 数组中获取唯一/不同的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051995/

相关文章:

mysql - "LEFT JOIN AND"和 "LEFT JOIN WHERE"哪个更好

mysql - 如何在 CakePHP 中生成 MySQL IS NOT NULL 条件?

SQL 查询顺序错误,不知道为什么

mysql - 使用 MySQL 查询查找所有 NULL 值并将它们设置为最低的未使用数字

sql - 查询 JSON 类型内的数组元素

c - 为什么矩阵(二维数组)在打印时没有正确显示

Javascript:查找数组中最中间的值

javascript - 将日期时间区域字符串转换为日期时间 javascript

mysql - 将 Blob 存储在另一个表中或使用 mysql barracuda

html - 在表中显示 check 或 x bool 值