2016-09-30 21 views
0

オブジェクトの文字列配列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フィールドのみが削除されます。オブジェクト全体を削除するにはどうしたらいいですか?

+0

'UPDATE'クエリは、' WHERE'句に一致するすべての行を更新します。したがって、更新するすべての行に一致する 'WHERE'条件を使用するだけです。 – Barmar

+0

文字列であるjson配列から特定のオブジェクトを削除する必要があります。 – Squeez

+0

私はそれを理解しています。 'WHERE'条件に一致するすべての行から削除されます。なぜあなたはそれが一列から削除されると思いますか? – Barmar

答えて

0

見つかった。

データは、JSON_SEARCHを呼び出した後に"$.array[5].a"フォーマットであった。私はちょうど'''.a'を置き換える別の取り替えに取り替える必要がありました。

+0

変更されたクエリを投稿する必要があります。 – Barmar

関連する問題