Есть ли эквивалентный способ сделать MySQL JSONOBJECTAGG () в MariaDB? - PullRequest
0 голосов
/ 10 ноября 2018

Сервер, на котором я работал для проекта данных, потерпел крах, и сейчас я воссоздаю базу данных. Раньше я работал с базой данных MySQL, а сейчас я использую MariaDB. Я никогда не использовал MariaDB раньше.

Ранее я использовал следующую команду для вставки некоторых данных в одну таблицу из другой:

CREATE TABLE collaborators_list 
SELECT awards.id, awards.researcher_name, awards.organization_id, 
    JSON_OBJECTAGG(awards.fiscal_year, coapplicants.coapplicant_name, 
    coapplicants.organization_number) 
AS 'coapplicants_list' FROM awards 
INNER JOIN coapplicants 
ON awards.id=coapplicants.id 
GROUP BY awards.researcher_name, awards.organization_id;

По сути, я хочу сделать то же самое в MariaDB. Я попытался посмотреть здесь: https://mariadb.com/kb/en/library/json-functions/ но если я что-то не так понимаю, то ничего из этого я не хочу ...

Помощь!

1 Ответ

0 голосов
/ 10 ноября 2018

Нет , MariaDB по-прежнему не поддерживает функции JSON_ARRAYAGG и JSON_OBJECTAGG. Был подан билет JIRA для запроса этой функции: https://jira.mariadb.org/browse/MDEV-16620

Теперь из документов JSON_OBJECTAGG():

В качестве аргументов требуется только два имени столбца или выражения, первый из них используется как ключ, а второй - как значение.

Ошибка возникает, если какое-либо имя ключа равно NULL или число аргументов равно не равно 2.

Однако вы указываете три аргумента в JSON_OBJECTAGG(awards.fiscal_year, coapplicants.coapplicant_name, coapplicants.organization_number); поэтому ваш запрос не будет работать так же .

Теперь, при отсутствии необходимых функций, мы можем использовать Group_Concat() с Concat(). Я предполагаю, что вам нужны только первые два аргумента (как объяснено в предыдущем пункте).

GROUP_CONCAT( DISTINCT CONCAT('"', awards.fiscal_year, '": "',
                              coapplicants.coapplicant_name, '"') 
              SEPARATOR ', ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...