Как перечислить каждый элемент JSON Array отдельно в MySQL Query? - PullRequest
0 голосов
/ 31 марта 2020

Я написал следующий MySQL Json Запрос массива. Mysql версия 8.0.18-commercial

select 
networkInfo->>"$.*" as network,
servers->>"$[*]" as server
from table1
where id = 56;

Выход имеет 2 столбца network и server типа JSON

network              server
---                  ---
[                    [
    "Linux123",          "Server123",
    "RHEL",              "Server1231",
    "abc.com"            "Server1232"
]                    ]

Я хочу изменить SELECT запрос, такой что вывод имеет отдельную строку для каждого server:

network                      server
---                          ----  
[                             Server123
    "Linux123",
    "RHEL",
    "abc.com"
]

[                             Server1231
    "Linux123",
    "RHEL",
    "abc.com"
]

[                             Server1232
    "Linux123",
    "RHEL",
    "abc.com"
]

1 Ответ

1 голос
/ 31 марта 2020

Вы можете использовать JSON_TABLE для извлечения различных значений server из servers, затем CROSS JOIN, что в networks значение для данного id:

SELECT t1.networkInfo->>"$.*" AS network, j.server
FROM table1 t1
CROSS JOIN JSON_TABLE(t1.servers, 
                      "$[*]" COLUMNS (
                        server VARCHAR(20) PATH '$'
                        )
                      ) j
WHERE t1.id = 56

Вывод (мне пришлось взломать демо на основе ожидания структуры таблицы):

network                             server
["abc.com", "Linux123", "RHEL"]     Server123
["abc.com", "Linux123", "RHEL"]     Server1231
["abc.com", "Linux123", "RHEL"]     Server1232
...