如何从Oracle的JSON列中获取唯一的JSON键?
提取所有唯一JSON键的SQL方案
针对不同主流数据库,提供对应的SQL语句来提取my_table表中JSON_COLUMN列里所有唯一的JSON键:
MySQL(5.7及以上版本)
利用JSON_KEYS获取每行的JSON键数组,再通过JSON_TABLE将数组拆分为行,最后去重:
SELECT DISTINCT json_key FROM my_table, JSON_TABLE( JSON_KEYS(JSON_COLUMN), '$[*]' COLUMNS(json_key VARCHAR(255) PATH '$') ) AS keys_table;
PostgreSQL(9.4及以上版本)
使用json_object_keys(或jsonb_object_keys,针对jsonb类型更高效)直接拆分JSON键为行,再去重:
SELECT DISTINCT key FROM my_table, json_object_keys(JSON_COLUMN) AS key; -- 若JSON_COLUMN为jsonb类型,改用以下语句: -- SELECT DISTINCT key FROM my_table, jsonb_object_keys(JSON_COLUMN) AS key;
SQL Server(2016及以上版本)
通过OPENJSON解析JSON对象,返回包含键的结果集,再通过CROSS APPLY关联每行数据并去重:
SELECT DISTINCT [key] FROM my_table CROSS APPLY OPENJSON(JSON_COLUMN);
性能提示
对于百万级数据量,建议优先使用数据库原生优化的JSON类型(如MySQL的json、PostgreSQL的jsonb),若数据量过大可考虑分批查询或借助临时表提升效率。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

