mysql - 使用 MySQL 和 JSON 的更新查询

标签 mysql json

a和表b之间存在多对多关系。该关系存储在表a_b中,该表有两个字段:a_idb_id

对于 bgroup = 'XYZ' 的所有记录,我想要:

  1. a_b中查找匹配记录,然后...
  2. a_id 的相应值作为 JSON 数组插入 b.my_json

第一部分很简单:

SELECT * FROM a_b INNER JOIN b ON a_b.b_id = b.id WHERE b.group = 'XYZ'

我知道我需要使用更新查询(update b),并且我可能需要使用 JSON_SET 函数,但是我应该从哪里开始?

最佳答案

如果您存储的只是一个 int id 数组,则可以避免使用 JSON_SET 并仅使用 GROUP_CONCAT

UPDATE b as _b
  JOIN (
    ## selecting comma delimited list of ids for a json array
    SELECT
        a_b.b_id,
        CONCAT('[',GROUP_CONCAT(a_b.a_id ORDER BY a_b.a_id),']') as json
     FROM a_b JOIN b ON b.id=a_b.b_id 
    WHERE b.group = 'XYZ'
    GROUP BY b.id
  ) AS _a_b ON _a_b.b_id = _b.id
## set those matched a_b and b records w/ group XYZ w/ formed json
SET _b.my_json = _a_b.json
;

基本上,我们使用表别名来获取可用于 UPDATE 语句的分组 ID。

注意:GROUP_CONCAT 作为默认最大长度,但如果您要连接数千个 id,则可以随时增加该长度。

关于mysql - 使用 MySQL 和 JSON 的更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49246368/

相关文章:

mysql - 随机执行 SELECT 时为数据库表建立索引会有多大区别

mysql - 在名称包含另一个字符串的所有表中,在类文本类型的列内搜索字符串

javascript - 如何使用具有关联数组的 API 填写表单?

ios - 如何使用 AFNetworking-2.0 执行 JSON 编码的 GET 请求?

ios - TRON 快速响应头

ios - 删除所有以前的 UITableViewCell Swift 3/4 iOS

c++ - 对 get_mysql_instance 的 undefined reference

mysql - 查询过滤掉包含html标签的结果

php - Mysql 2跨 TableView 不将1=1关系转化为一个 View

java - JSONObject 到文档