MySQL8查询某个JSON类型的字段中出现过的所有键名(json key name)并去重返回
假设我有一张表叫 t1
, 其中有一个字段 info
是 JSON类型,现在我想查询 t1.info
字段中出现过的所有键名,MySQL提供了一个函数 JSON_KEYS(column)
来返回单条数据单个JSON字段中的所有键名组成的集合,那我想查询整个表所有记录中某个JSON字段出现的键名组成的集合并做去重之后的结果,该如何查询呢,某大模型给出的答案我尝试下来会报错,原因可能是MySQL版本问题,我没去深究:
这里提供另一种我尝试可行的方式供参考:
SELECT DISTINCT(b.info_key) FROM t1 JOIN
JSON_TABLE(JSON_KEYS(info), '$[*]' COLUMNS (info_key VARCHAR(255) PATH '$')
) b;
先利用JSON_KEYS()
返回单条记录中某个JSON字段的所有键名组成的数组,再利用 JSON_TABLE
函数把键名数组中的每一个元素展开当作一张临时表的一条记录,这样就可以方便的使用 DISTINCT
进行去重了。