首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >json_table不正确薪酬

json_table不正确薪酬
EN

Stack Overflow用户
提问于 2018-08-20 07:56:05
回答 1查看 461关注 0票数 0

我有一张类似于以下结构的桌子:

代码语言:javascript
复制
| 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中的in连接一个3.table。3.表名为产品。

我成功地编写了查询,但是我一直收到这样的消息:

Error Code: 1210. Incorrect arguments to JSON_TABLE

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

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

代码语言:javascript
复制
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

它将返回以下结果:

代码语言:javascript
复制
| id |    product_id`   |
|  2 |["25"]            |
|  3 |["10", "12"]      |
|  5 |["10", "15", "22"]|

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

代码语言:javascript
复制
| id | product_id` |
|  2 |      25     |
|  3 |      10     |
|  3 |      12     |
|  5 |      10     |
|  5 |      15     |
|  5 |      22     |
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 08:35:02

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

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

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

模式(MySQL v8.0)

代码语言:javascript
复制
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

代码语言:javascript
复制
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"       |

关于DB Fiddle的看法

注意事项

T表示您当前的结果集。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51926322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档