【问题标题】:How Can I merge JSON ArrayList in formated String Query?如何在格式化的字符串查询中合并 JSON ArrayList?
【发布时间】:2021-10-29 09:00:57
【问题描述】:

我的 MYSQL 中有这个 JSON 列(一行):

[{"motivo": {"id": 60}, "documento": {"id": 3}, "motivoStr": "Comprovante de Endereco"},
{"motivo": {"id": 61}, "documento": {"id": 4}, "motivoStr": "Comprovante de Renda"}]

我需要在 mysql Query 中对此进行格式化,以将所有“motivoStr”与分隔符连接起来,例如:

从a中选择ANY_COMMAND

输出:

Comprovante de Endereco<br>Comprovante de Renda

命令 JSON_TABLE 不起作用,因为服务器的版本是: 5.7.12

【问题讨论】:

    标签: mysql format schema mysql-json


    【解决方案1】:
    SELECT test.id, GROUP_CONCAT(jsontable.motivoStr SEPARATOR '<br>') output
    FROM test
    CROSS JOIN JSON_TABLE(test.jsonvalue,
                          '$[*]' COLUMNS (motivoStr VARCHAR(255) PATH '$.motivoStr')) jsontable
    GROUP BY test.id;
    

    https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=7e0d28bc1d5301d3138ed1cd0d5fa051


    我忘了提到版本,在本例中是 5.7 – Milton Neto

    每个值(JSON 数组)的最大对象数量是多少? ——秋名

    在这种情况下是五个 - 米尔顿内托

    适用于 MySQL 5.7+ 且每个数组最多 5 个对象的解决方案:

    SELECT test.id, 
           GROUP_CONCAT(JSON_EXTRACT(test.jsonvalue, 
                                     CONCAT('$[', 
                                            numbers.num, 
                                            '].motivoStr'))
                        SEPARATOR '<br>') output
    FROM test
    CROSS JOIN ( SELECT 0 num UNION
                 SELECT 1 UNION
                 SELECT 2 UNION
                 SELECT 3 UNION
                 SELECT 4 ) numbers
    GROUP BY test.id;
    

    https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=2f9ab2d95ffe6a58a96dffb0cde45511

    【讨论】:

    • 对不起,我忘了说版本,在这种情况下是5.7 这个函数“JSON_TABLE”只适用于Mysql 8.0+ 但是感谢解释
    • @MiltonNeto 每个值(JSON 数组)的最大对象数量是多少?
    • 在这种情况下是五个
    • @MiltonNeto 为您添加的版本的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    相关资源
    最近更新 更多