#mysql #arrays #json
#mysql #массивы #json
Вопрос:
Я хотел бы получить массив [1,2,3]
в mysql. Например:
with tbl (id) as (
select 1 union select 2 union select 3
) select 'something', json_arrayagg(id) from tbl
# something, json_arrayagg(id)
# 'something', '[1, 2, 3]'
Был бы более простой способ сделать это, а не «создавать таблицу» в CTE, а затем группировать ее вне нее?
Например, я пытаюсь сделать что-то подобное (если это возможно):
SELECT '1', [1,2,3]
MySQL '8.0.20'
Код ошибки: 1064. У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘[1,2,3]) идентификаторы из группы сортировки по порядку букв по идентификаторам asc ВЫБЕРИТЕ ‘1’, [1,2,3]’ в строке 4
Комментарии:
1. Можете ли вы дать нам некоторый контекст здесь? Я имею в виду, что не так с литералом
[1, 2, 3]
?2. @TimBiegeleisen это не работает (для меня) в mysql8. Вы можете сделать это самостоятельно?
3. Работает для меня …
4. @TimBiegeleisen о, я вижу — да, это работает и для меня тоже! Я имею в виду без использования
cte
и просто используя[1,2,3]
или что-то более простое.5. Ну,
[1, 2, 3]
на самом деле это действительный литерал JSON, насколько я знаю. Я не уверен, что вы имеете в виду здесь.
Ответ №1:
После долгих комментариев выше появился ваш актуальный вопрос, который заключается в том, что вы не понимаете, как работать с литералами JSON в MySQL. Допустимые литералы JSON в MySQL всегда заключаются в одинарные кавычки, как и строковые литералы. Рассмотрим этот небольшой пример:
WITH yourTable AS (
SELECT '1' AS id, '[1,2,3]' AS array
)
SELECT Id, JSON_EXTRACT(array, '$[2]') AS third
FROM yourTable;
Это выводит 1, 3
, как показывает демонстрационная ссылка. Ключевым моментом здесь является то, что литерал массива JSON, который вы уже знаете, как формировать, заключен в одинарные кавычки.
Комментарии:
1. ах, понял, часть ‘json’ должна быть понятной: это не собственный массив — спасибо!
2. @David542 В основном все базы данных SQL имеют краткие и запутанные API-интерфейсы JSON … иногда это настоящая головная боль.