使用MySQL和JSON的更新查询

时间:2018-03-13 00:16:05

标签: mysql json

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

对于b group ='XYZ'的所有记录,我想:

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

    第一部分很容易:

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

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

1 个答案:

答案 0 :(得分:0)

如果你要存储的只是一个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,你总是可以增加它。