Самый простой способ создать литерал массива в MySQL

#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 … иногда это настоящая головная боль.