如何获取MariaDB整个JSON列中的所有唯一键?
提取MariaDB表中JSON列的所有唯一键
这个需求完全可以实现,以下是针对两种期望结果的具体解法:
测试数据准备
CREATE TABLE t (j LONGTEXT); INSERT INTO t (j) VALUES ('{"a":"1"}'); INSERT INTO t (j) VALUES ('{"b":"2"}'); INSERT INTO t (j) VALUES ('{"c":"0", "d":"0"}'); INSERT INTO t (j) VALUES ('{"c":"1", "d":"1"}');
形式二(更优:每行一个唯一键)
利用JSON_TABLE将JSON_KEYS返回的数组拆分为单行记录,再通过DISTINCT去重:
SELECT DISTINCT key_name FROM t, JSON_TABLE( JSON_KEYS(j), '$[*]' COLUMNS (key_name VARCHAR(255) PATH '$') ) AS keys_table;
执行结果:
+----------+ | key_name | +----------+ | a | | b | | c | | d | +----------+
形式一(聚合为单个JSON数组)
在形式二的基础上,使用JSON_ARRAYAGG将去重后的键聚合为一个JSON数组:
SELECT JSON_ARRAYAGG(DISTINCT key_name) AS all_unique_keys FROM t, JSON_TABLE( JSON_KEYS(j), '$[*]' COLUMNS (key_name VARCHAR(255) PATH '$') ) AS keys_table;
执行结果:
+----------------------+ | all_unique_keys | +----------------------+ | ["a", "b", "c", "d"] | +----------------------+
注:以上方法要求MariaDB版本≥10.4,因为
JSON_TABLE是从10.4版本开始引入的特性。
内容的提问来源于stack exchange,提问作者chris01
相关产品推荐
相关产品推荐

