表a
和表b
之间存在多对多关系。该关系存储在表a_b
中,该表包含两个字段:a_id
,b_id
。
对于b
group
='XYZ'的所有记录,我想:
a_b
中找到匹配的记录,然后...... a_id
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
函数,但是从哪里开始?
答案 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,你总是可以增加它。