MariaDB Json:获取整个 JSON 列的每个键

问题描述 投票:0回答:2
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"}');

SELECT JSON_KEYS(j) FROM t;
+--------------+
| JSON_KEYS(j) |
+--------------+
| ["a"]        |
| ["b"]        |
| ["c", "d"]   |
| ["c", "d"]   |
+--------------+

我正在寻找整个表中每个键的列表?这可能吗?

比如

+----------------------+
| ["a", "b", "c", "d"] |
+----------------------+

甚至更好。

+-----+
| "a" |
| "b" |
| "c" |
| "d" |
+-----+
json mariadb
2个回答
0
投票

根据您的需要,其中之一:

# just the values
select distinct k
from t
cross join
json_table(json_keys(j), '$[*]' columns (k text path '$')) j
order by k

#   quoted values
select distinct json_quote(k)
from t
cross join
json_table(json_keys(j), '$[*]' columns (k text path '$')) j
order by k

# all in an array
select json_arrayagg(distinct k order by k)
from t
cross join
json_table(json_keys(j), '$[*]' columns (k text path '$')) j

0
投票

这可以使用

JSON_TABLE
来完成,如下所示:

SELECT DISTINCT `Key`
FROM t, 
     JSON_TABLE(
         JSON_KEYS(t.j),
         '$[*]'
         COLUMNS(
           `Key` VARCHAR(10) PATH "$"
         )
      ) d
© www.soinside.com 2019 - 2024. All rights reserved.