Как мне получить один ряд элементов из вложенного JSON в MariaDB? - PullRequest
0 голосов
/ 27 января 2020

есть ли какой-либо запрос SOL в MariaDB, чтобы получить одну строку JSON из вложенного JSON массива

[
{"connection":[{"f_id":"593435068"}],"connection_id":1},
{"connection":[{"f_id":"1103648403"}],"connection_id":2}
]

Я пытаюсь это сделать:

, если я добавлю 1 в запросе SQL это даст мне

{"connection":[{"f_id":"593435068"}],"connection_id":1}

, если я добавлю 2 в запросе SQL, это даст мне

{"connection":[{"f_id":"1103648403"}],"connection_id":2}

Я сделал это успешно в MYSQL с помощью JSON_TABLE() как:

SELECT jd.con_name,jd.con_id 
  FROM your_table,
  JSON_TABLE(json_col, "$[*]" 
  COLUMNS( con_name JSON PATH "$.connection", con_id JSON PATH "$.connection_id" ) ) AS jd 
 WHERE jd.con_id = 1;

Таким образом я получаю всегда точную строку

, но я не могу сделать это в MariaDB

Может кто-нибудь, пожалуйста, помогите мне Спасибо

Ответы [ 2 ]

0 голосов
/ 09 февраля 2020

Одной из опций может быть использование комбинации функций:

SELECT
  JSON_EXTRACT(`jd`.`con_json`, '$.connection') `con_name`,
  JSON_EXTRACT(`jd`.`con_json`, '$.connection_id') `con_id`,
  `jd`.`con_json`
FROM (
  SELECT
    JSON_EXTRACT(
      `json_col`,
      CONCAT('$[',
        REGEXP_REPLACE(
          JSON_SEARCH(
            `json_col`,
            'one',
            @`id_search`,
            NULL,
            '$[*].connection_id'
          ),
        '[^0-9]',
        ''
      ),
      ']')
    ) `con_json`
  FROM
    `your_table`
) `jd`;

См. dbfiddle .

0 голосов
/ 27 января 2020

Вы можете использовать функцию JSON_EXTRACT():

SELECT JSON_EXTRACT(js, '$[0]'), JSON_EXTRACT(js, '$[1]') 
  FROM your_table

Демонстрация 1

MariaDB пока не поддерживает JSON_TABLE().

Предположим, что у вас есть другая таблица (t2), содержащая значения ID 1 и 2, затем рассмотрите возможность использования:

SELECT JSON_EXTRACT(t1.js, CONCAT('$[', t2.ID - 1, ']')) AS col
  FROM t2
 CROSS JOIN t1

Демонстрация 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...