我有许多列的表,其中包含对象的字符串数组 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 字段,而不是整个对象。如何删除整个对象?