Mysql - обновить + вставить JSON - PullRequest
0 голосов
/ 30 октября 2018

У меня есть таблица с полем JSON. Значение по умолчанию для поля - "NULL" - теперь я хотел бы обновить одно поле данных JSON.

   | ----------------- |
   | [int]  |   [JSON] |
   |  xy    |   ipdata |
   | ----------------- |

Таким образом, поле может быть примерно таким:

{ ip: "233.233.233.233", "data": "test", "name": "Peterson", "full_name": "Hanson Peterson" }

Так что я бы хотел обновить IP.

update table set ipdata = JSON_SET(ipdata, "$.ip", "newIp") where xy = 2;

Но что произойдет, если поле имеет значение NULL? Похоже, что приведенный выше запрос не «создает» новый JSON только с полем IP. Это просто ничего не делает.


Как я могу сказать mySql вставить {"ip": "newIp"}, если поле пустое, а в противном случае просто обновить ip ключ json?

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете использовать Case .. When для обработки Null. Когда поле имеет значение null, вы можете вместо этого создать Json_object() и установить его:

UPDATE table 
SET ipdata = CASE WHEN ipdata IS NULL THEN JSON_OBJECT("ip", "newIp") 
                  ELSE JSON_SET(ipdata, "$.ip", "newIp") 
             END 
WHERE xy = "xy";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...