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" |
+-----+
根据您的需要,其中之一:
# 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
这可以使用
JSON_TABLE
来完成,如下所示:
SELECT DISTINCT `Key`
FROM t,
JSON_TABLE(
JSON_KEYS(t.j),
'$[*]'
COLUMNS(
`Key` VARCHAR(10) PATH "$"
)
) d