gpt4 book ai didi

mysql - json_table 参数不正确

转载 作者:行者123 更新时间:2023-11-29 06:40:21 28 4
gpt4 key购买 nike

我有一个类似以下结构的表格:

| id |         data         |
| 1 | {"products":[1,2,3]} |
| 2 | {"products":[2,5,7]} |
| 3 | {"products":[2,4,1]} |
| 4 | {"products":[7,8]} |
| 5 | {"products":[2,8]} |

我想将此表连接到查询,并使用产品 JSON 中的 id 来连接 3. 表。 3.表称为产品。

我设法编写了查询,但我一直收到此消息:

错误代码:1210。JSON_TABLE 的参数不正确

不幸的是,我无法更改结构,并且我必须从 JSON 字段获取这些 Id。

到目前为止我有以下查询:

select pd.`id` pd.parameter_condition->>'$.products' as `product_id`
from `shop`.`ordering` o
inner join `shop`.`ordered_product` op on (op.`order_id` = o.`id`)
-- [... a lot more joins]
inner join `shop`.`price_dependency` pd on (pd.`attribute_value_id` = av.`id`)
where o.type_id = 4

返回以下结果:

| id |    product_id`   |
| 2 |["25"] |
| 3 |["10", "12"] |
| 5 |["10", "15", "22"]|

但我最终想要的是这样的:

| id | product_id` |
| 2 | 25 |
| 3 | 10 |
| 3 | 12 |
| 5 | 10 |
| 5 | 15 |
| 5 | 22 |

最佳答案

您可以尝试使用JSON_EXTRACT来获取JSON数组值。

为 JSON 数组的索引创建结果集,并根据需要继续创建 JSON 数组的最大长度。

然后使用T CROSS JOIN索引表,使用JSON_EXTRACT函数只显示数组中存在哪个索引的值。

架构 (MySQL v8.0)

CREATE TABLE T(
id int,
product_id varchar(50)
);
insert into T values (2,'["25"]');
insert into T values (3,'["10", "12"]');
insert into T values (5,'["10", "15", "22"]');

查询#1

SELECT
id,
JSON_EXTRACT(product_id, concat('$[',idx,']')) product_id
FROM T
CROSS JOIN (
SELECT 0 AS idx UNION
SELECT 1 AS idx UNION
SELECT 2 AS idx
) AS indexes
where JSON_EXTRACT(product_id, concat('$[',idx,']')) is not null
order by id;

| id | product_id |
| --- | ---------- |
| 2 | "25" |
| 3 | "10" |
| 3 | "12" |
| 5 | "10" |
| 5 | "15" |
| 5 | "22" |

View on DB Fiddle

注意

T 表示您当前的结果集。

关于mysql - json_table 参数不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51926322/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com