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

时间:2016-09-30 14:42:41

标签: mysql mysql-json

我有许多列的表,其中包含对象的字符串数组json。

我需要从这些数组中删除几个元素。 我发现如何从一行中删除元素,但如何在多行中执行此操作?

对于一行,我使用json_search查找必须删除的元素,但是我有很多行和许多要删除的元素。没有存储过程(循环时)有没有办法做到?

这是数据样本:

-------------------------------------------------------------------
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字段,而不是整个对象。如何删除整个对象?

1 个答案:

答案 0 :(得分:0)

找到了方法。

调用"$.array[5].a"后数据为JSON_SEARCH格式。我只需将replace包装到另一个替换中,将'.a'替换为''