2016-09-30 855 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

相關問題