【问题标题】:json_table Incorrect aggumentsjson_table 不正确的参数
【发布时间】:2018-08-20 07:56:05
【问题描述】:

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

| 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. 表叫做products。

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

Error Code: 1210. Incorrect arguments to 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     |

【问题讨论】:

    标签: mysql json mysql-8.0


    【解决方案1】:

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

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

    然后使用TCROSS 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 表示您当前的结果集。

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 2020-03-13
      • 2023-04-11
      • 2011-06-23
      • 2019-05-23
      • 2015-05-27
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多