2016-09-30 859 views
0

我有许多包含对象字符串数组json的列的表。在MySQL中删除字符串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"}]}| 

我需要从contans a和/或g

我的查询中的每个array仅除去内容是:

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

我发现如何更新所有列的方式,但此查询只删除json字段,而不是整个对象。我怎样才能删除整个对象?

+0

'UPDATE'查询将更新所有与WHERE条款匹配的行。所以你只需要使用一个匹配你想要更新的所有行的WHERE条件。 – Barmar

+0

我需要从字符串的json数组中删除特定的对象。 – Squeez

+0

我明白这一点。它将从所有符合'WHERE'条件的行中移除。你为什么认为它只会从一行中删除? – Barmar

回答

0

找到了方法。

拨打JSON_SEARCH后数据为"$.array[5].a"格式。我只需要将替换换成另一个替换,将'.a'替换为''

+0

您应该发布修改后的查询。 – Barmar

相关问题