MySQL 8+ JSON Запрос на извлечение одного значения из массива - PullRequest
1 голос
/ 16 июня 2020

Я пробую всевозможные возможности для извлечения единственного элемента в столбце JSON, содержащем массив. Позвольте мне привести пример:

Database:
id | info
---------
1  |{"name": "aaa", "colors": ["a","b"]}
2  |{"name": "bbb", "colors": ["c","d"]}
3  |{"name": "ccc", "colors": ["e","f"]}

Мне нужен аналогичный запрос, например: select name, color from info where color = a;

И это должно вернуть: "aaa", "a"

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

Ответы [ 2 ]

1 голос
/ 16 июня 2020
SELECT info->"$.name" AS `name`
FROM test
WHERE JSON_CONTAINS(info, '"a"', '$.colors');
1 голос
/ 16 июня 2020

Вы можете использовать json_search():

select info ->> '$.name' as name, 'a' color
from mytable 
where json_search(info ->> '$.colors', 'one', 'a') is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...