2017-12-02 17 views
0

MariaDBのドキュメントでは、JSON_SETは情報の挿入または更新を行いますが、JSON_INSERTは挿入するだけでJSON_REPLACEは代用するだけです。mariadbのJSON_SET、データを挿入しないでください

私は以下のコードを使用しています。情報が存在しない場合、または存在しない場合は、更新する必要があります。

問題は、それが既に存在する場合にのみ更新され、存在しない場合には挿入されないということです。

MariaDB docs

UPDATE myTable SET config = JSON_SET(config, '$.person.name', 'zeca', '$.person.details.age', '87') WHERE id = 127 

"詳細" は、すでにmytableはの "設定" フィールドに存在する場合は、 "年齢" が登録されます。 「詳細」がまだ存在しない場合、details.ageを登録したいが登録していない。

+0

あなたはそれを動作させましたか? – musashii

答えて

0

私は自分のコードをテストcan't、多分あなたはそれがあなたが必要として、文を調整し、この

UPDATE myTable SET config = JSON_MERGE(config, '{"person": {}'), config = JSON_SET(config, '$.person.name', 'zeca', '$.person.details.age', '87') WHERE id = 127

0

のようなもので動作するように取得することができます。

UPDATE `myTable` 
    SET `config` = JSON_SET(`config`, '$.person.name', 'zeca'), 
     `config` = IF(JSON_EXISTS(`config`, '$.person.details') IS NOT NULL, 
     JSON_SET(
      `config`, 
      '$.person.details', 
      JSON_OBJECT('age', 87) 
     ), 
     JSON_INSERT(
      `config`, 
      '$.person', 
      JSON_OBJECT('details', 
      JSON_OBJECT('age', 87) 
     ) 
     ) 
    ) 
WHERE `id` = 127; 

dbfiddleを参照してください。

関連する問題