【问题标题】:Updating the Fields in the JSON_ARRAY Mysql 8.0更新 JSON_ARRAY Mysql 8.0 中的字段
【发布时间】:2020-05-19 11:40:51
【问题描述】:

这是我的场景,我想将 BOB 的 hourly_rate 更新为 600。如何从下面提到的特定用户 BOB 的 json_array 中提取 hourly_rate。

@data = [{
 "Subject": "Maths",
 "type": "paid",
 "tutor": "MARY",
 "hourly_rate": "500"
},
{
 "Subject": "Maths",
 "type": "paid",
 "tutor": "BOB",
 "hourly_rate": "700"
}]

我可以通过Where 子句使用JSON_SEARCH() 来获取索引吗?

示例:

  "Select JSON_SET(@data,'$[*].hourly_rate', 600) Where 'Subject' = Maths and 'tutor' = 'BOB'";

【问题讨论】:

  • @Rahul Reddy 已回答并完成 :)
  • 我很好奇,你为什么对这个完全相同的文档数组使用 JSON,而不是将数据作为行存储在具有普通列的表中?然后通过在单行上更新来设置hourly_rate 或任何其他单独的列会很简单。
  • 我使用的 Json 列将包含不同的主题和不同的类型(付费和免费)。这里的每一行都包含教练机构的信息。所以不要让coaching_institute_id 漂浮在其他桌子周围。我有点让 Columns 处于非规范化状态。主要原因是我们有一个在不久的将来进入 NoSQL 的计划,并且通过非规范化结构的研究使工作变得容易。

标签: mysql sql json mysql-workbench mysql-8.0


【解决方案1】:

我得到了这个工作。但我必须使用view 才能获得更简洁的代码。

我的回答是基于这个:https://stackoverflow.com/a/51563616/1688441


更新查询

小提琴@https://www.db-fiddle.com/f/7MnPYEJW2uiGYaPhSSjtKa/1

UPDATE test
  INNER JOIN getJsonArray ON getJsonArray.tutor = 'BOB'
SET test =
  JSON_REPLACE(
    test,
    CONCAT('$[', getJsonArray.rowid - 1, '].hourly_rate'), 600);

select * from test;    

Ddl

CREATE TABLE `test` (
  `test` json DEFAULT NULL
);

INSERT INTO `test` (`test`)
VALUES ('[{
 "Subject": "Maths",
 "type": "paid",
 "tutor": "MARY",
 "hourly_rate": "500"
},
{
 "Subject": "Maths",
 "type": "paid",
 "tutor": "BOB",
 "hourly_rate": "700"
}]');

create view getJsonArray as    
select data.* 
from   test, json_table(
  test,
         "$[*]"
         COLUMNS(
          rowid FOR ORDINALITY,
            Subject VARCHAR(100) PATH "$.Subject" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR,
            type VARCHAR(100) PATH "$.type" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR,
            tutor VARCHAR(100) PATH "$.tutor" DEFAULT '111' ON EMPTY DEFAULT '999' ON ERROR,
            hourly_rate JSON PATH "$.hourly_rate" DEFAULT '{"x": 333}' ON EMPTY
         )
       ) data
      ;

【讨论】:

  • 工作!!谢谢
  • @Rahul Reddy 请更改getJsonArray 视图中的默认值。有一些ON EMPTYON ERROR
猜你喜欢
  • 2021-03-18
  • 2011-09-02
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多