首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL JSON_MERGE / REPLACE。如何实际更新值而不合并

问MySQL JSON_MERGE / REPLACE。如何实际更新值而不合并
EN

Stack Overflow用户
提问于 2017-08-24 22:07:47
回答 1查看 2K关注 0票数 1

我想做的,但我想这是不可能的:

我在一个列中有JSON数据,用于保存翻译。例如,列描述值:{"de": "hi wie gehts?", "en": "hi, how are you?"}

现在我只想更新"en"属性。我知道用JSON_REPLACE可以做到这一点,但它有一种奇怪的语法,我必须首先生成SQL代码才能实现。

我正在寻找的是这样一种可能性,即只发送{"en": "hi, how are you!?"},然后它应该保留"de"属性,并且只更新"en"属性。

有一个JSON_MERGE函数,但这不是我想要的,但除此之外,这是我喜欢使用的语法。

有没有一些嵌套的mysql函数的变通方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-25 19:04:03

有了可用的12.16 JSON Functions,要实现所需的功能并不容易。如果普通的JSON总是只有一个键,您可以尝试如下所示:

代码语言:javascript
复制
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.00 sec)

mysql> SET
    ->   @`json` := '{"de": "hi wie gehts?", "en": "hi, how are you?"}',
    ->   @`plain_json` := '{"en": "hi, how are you!?"}';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT
    ->   JSON_MERGE(
    ->     JSON_REMOVE(
    ->       @`json`,
    ->       CONCAT('$.',
    ->              JSON_EXTRACT(
    ->                JSON_KEYS(@`plain_json`),
    ->                '$[0]'
    ->             )
    ->       )
    ->     ),
    ->     @`plain_json`
    ->   ) `UPDATE`;
+----------------------------------------------------+
| UPDATE                                             |
+----------------------------------------------------+
| {"de": "hi wie gehts?", "en": "hi, how are you!?"} |
+----------------------------------------------------+
1 row in set (0.00 sec)

如果您的普通JSON中有多个键,则需要更复杂的东西来实现您的目标。

参见db-fiddle。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45863825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档