在MySQL中删除字符串json数组中的元素

rbpvctlc  于 2023-03-22  发布在  Mysql
关注(0)|答案(2)|浏览(565)

我有一个包含许多列的表,其中包含对象的字符串数组json。
我需要从这些数组中删除几个元素。我发现如何从一行中删除元素,但如何在多行中删除元素?
对于一行,我使用json_search来查找必须删除的元素,但是我有许多行和许多元素要删除,有没有什么方法可以不使用存储过程(while循环)来完成呢?
以下是数据示例:

-------------------------------------------------------------------
id | DATA                                                          |
-------------------------------------------------------------
1  | {"array":[{"a":"a","b":"b","c":"c"},{"b":"b","c":"c"}]}|
------------------------------------------------------------
2 | {"array":[{"b":"b","c":"c","f":"f"},{"b":"b","c":"c","d":"d"}]}|
-------------------------------------------------------------------
3 | {"array":[{"a":"a","b":"b","c":"c"},{"g":"g","ff":"ff"}]}|
4 | {"array":[{"q":"q"},{"g":"f","e":"e"}]}|

我只需要从每个array中删除包含a和/或g的元素
我的疑问是:

UPDATE MY_TABLE
SET DATA = JSON_REMOVE(
    DATA,
    REPLACE(JSON_SEARCH(
                (SELECT DATA WHERE DATA LIKE "%a%"),
              'all',
              "%a%"
            ),
    '"',
    '')
) WHERE DATA LIKE "%a%";

我找到了更新所有列的方法,但是这个查询只删除了json字段,而不是整个对象。我怎么才能删除整个对象呢?

mutmk8jj

mutmk8jj1#

我有一个类似的答案,并按照OP的答案,并能够得到它的工作!他们只是做了:
UPDATE MY_TABLE SET DATA = JSON_REMOVE(DATA,REPLACE(REPLACE(JSON_SEARCH((SELECT DATA WHERE DATA LIKE“%a%”),'all',“%a%”),'“',''),'. a','')WHERE DATA LIKE“%a%";

2w2cym1i

2w2cym1i2#

找到路了。
在调用JSON_SEARCH后,数据是"$.array[5].a"的。我只需要将replace Package 成另一个replace,将'.a'替换为''

相关问题