Задать вопрос
@agent_2203

Как удалить кортеж из массива по значению кортежа?

Есть следующая строка в таблице

+---+----------------------+
| id | sort
+---+----------------------+
| 1 | [12, 13, {"12": 123} ]
+---+----------------------+

Как можно удалить элемент {"12": 123} не зная его индекс в массиве, но зная сам кортеж ?
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Поделить на элементы, отбросить ненужные, собрать обратно:
WITH cte AS (SELECT 1 id, CAST('[12, 13, {"12": 123} ]' AS JSON) sort)
SELECT cte.id, JSON_ARRAYAGG(jsontable.element) sort
FROM cte
CROSS JOIN JSON_TABLE(cte.sort,
                      '$[*]' COLUMNS (element JSON PATH '$')) jsontable
WHERE jsontable.element != CAST('{"12": 123}' AS JSON)
GROUP BY cte.id

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=405ff0...

PS. Сравнение объектов JSON - занятие неблагодарное. В более сложных случаях не пройдёт, даже JSON_OVERLAPS() может не спасти. Возможно, использование строковых функций на строковом представлении JSON более правильное решение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы