@agent_2203

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

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

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

Как можно удалить элемент {"12": 123} не зная его индекс в массиве, но зная сам кортеж ?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 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 более правильное решение.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы