オブジェクトの文字列配列jsonを含む多くの列を持つテーブルがあります。MySQLの文字列json配列から要素を削除します
これらの配列からいくつかの要素を削除する必要があります。 要素を1行から削除するにはどうすればよいですか。複数の行でどのように行うことができますか?
私は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
をcontansというのが私のクエリは次のとおりです。私が見つけ
UPDATE MY_TABLE
SET DATA = JSON_REMOVE(
DATA,
REPLACE(JSON_SEARCH(
(SELECT DATA WHERE DATA LIKE "%a%"),
'all',
"%a%"
),
'"',
'')
) WHERE DATA LIKE "%a%";
すべての列を更新する方法ですが、このクエリではオブジェクト全体ではなくjsonフィールドのみが削除されます。オブジェクト全体を削除するにはどうしたらいいですか?
'UPDATE'クエリは、' WHERE'句に一致するすべての行を更新します。したがって、更新するすべての行に一致する 'WHERE'条件を使用するだけです。 – Barmar
文字列であるjson配列から特定のオブジェクトを削除する必要があります。 – Squeez
私はそれを理解しています。 'WHERE'条件に一致するすべての行から削除されます。なぜあなたはそれが一列から削除されると思いますか? – Barmar