- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MySQL 8.0.22 JSON 列,其中包含具有事先不知道的键的对象:
'{"x": 1, "y": 2, "z": 3}'
'{"e": 4, "k": 5}'
我想使用 JSON_TABLE
将这些值扩展为包含键值对的多行:
困难当然在于 key 不是先验。我想到的最好的事情是......
SET @json_doc = '{"x": 1, "y": 2, "z": 3}';
SELECT a.seq, b.k, a.v
FROM
JSON_TABLE(
@json_doc,
"$.*"
COLUMNS(
seq FOR ordinality,
v INT PATH "$"
)
) AS a,
JSON_TABLE(
JSON_KEYS(@json_doc),
"$[*]"
COLUMNS(
seq FOR ordinality,
k CHAR(1) PATH "$"
)
) AS b
WHERE a.seq = b.seq;
这感觉很奇怪,因为它使用了两个 JSON_TABLE
调用,对值和键进行交叉连接,然后保持对齐。我想找到一个像这样的更简单的查询...
SELECT a.seq, b.k, a.v
FROM
JSON_TABLE(
@json_doc,
"$.*"
COLUMNS(
seq FOR ordinality,
k CHAR(1) PATH "?" -- <-- what do I put here to find each key?
v INT PATH "$"
)
) AS a,
我知道这个问题可能可以通过 CTE 或数字表和 JSON_EXTRACT
来解决。但是,如果可能的话,我想找到一些高性能和可读的东西。
最佳答案
您可以使用 ROW_NUMBER()
窗口函数来使用枚举,同时使用 JSON_KEYS()
确定键值,然后使用 提取相应的键>JSON_EXTRACT()
从我们得到的数组中
WITH k AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC) AS rn,
JSON_KEYS(`jsdata`) AS jk
FROM `tab` AS t
JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j
)
SELECT JSON_UNQUOTE(JSON_EXTRACT(jk, CONCAT('$[',rn-1,']'))) AS "key",
value
FROM k
或使用以下查询更直接
SELECT JSON_UNQUOTE(
JSON_EXTRACT(JSON_KEYS(`jsdata`),
CONCAT('$[',
ROW_NUMBER() OVER(PARTITION BY `jsdata` ORDER BY value DESC)-1,
']'))
) AS "key", value
FROM `tab` AS t
JOIN JSON_TABLE(`jsdata`,'$.*' COLUMNS (value INT PATH '$')) j
关于mysql - 使用 MySQL JSON_TABLE 将具有未知键的 JSON 扩展到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65536438/
我有一个类似以下结构的表格: | id | data | | 1 | {"products":[1,2,3]} | | 2 | {"products":[2,5,7
在 MySQL 8 中,我们现在可以使用 JSON 类型的列,也可以使用内置函数,如 JSON_TABLE() 但由于我在不同的场景中使用,有时我会看到我没想到的结果。 Docs for JSON_T
我正在使用 JSON 表,但遇到了问题。我收到以下错误: 错误代码:1210。JSON_TABLE 的参数不正确 我在 AWS 上通过 MySQL Workbench 使用 MySQL 引擎版本 8.
我想将名为 words 的数据库表中名为 data_table 的 json 列转换为表。栏目内容为: {"123456":{"first":"hello","second":"there"}, "
我有一个 MySQL 8.0.22 JSON 列,其中包含具有事先不知道的键的对象: '{"x": 1, "y": 2, "z": 3}' '{"e": 4, "k": 5}' 我想使用 JSON_T
我正在尝试使用 JSON_TABLE 解析 JSON。 Oracle 数据库版本 12.1.0.2 { "Rownum": "1", "Name": "John", "AddressArray"
我在谷歌上搜索了很多,似乎无法找到一个简单的解决方案来解决我的简单用例。 我在 Oracle 12C 数据库中有一个 json 列(当然实际上是一个带有 json 约束的 varchar),并且在该列
我需要取消嵌套存储为 JSON 文档一部分的大型数组。 在 Oracle 和 MYSQL 中,我可以为此使用 JSON_TABLE 在 SQL Server 中我可以使用 OPENJSON 在 Pos
我实际上想使用 JSON_TABLE 结构查询存储在 Oracle 数据库中的 JSON 字符串。这非常有效。 SQL 查询 SELECT f.val from JSON, JSON_TAB
这是我面临的问题的最低工作版本。正在关注the JSON table example在文档页面上,我在 MySQL 8 中有下表 test,其中 id 是一个 INT 字段,data 是一个 JSON
这是我面临的问题的最低工作版本。正在关注the JSON table example在文档页面上,我在 MySQL 8 中有下表 test,其中 id 是一个 INT 字段,data 是一个 JSON
我是一名优秀的程序员,十分优秀!