SQL-запрос для обновления значения поля JSON в MySQL

Используя MySQL, мне нужно обновить запись, в которой в поле типа json есть нулевое значение. Например,

Таблица 1

Столбец А Столбец Б Ячейка 1 [{"id":1, "name":"abc"},{"id":2, "name":"xyz"},{"id":3, "name":null}] Ячейка 2 [{"id":4, "name":"test 1"},{"id":5, "name":null}]

Таблица 2

идентификатор имя 1 абв 2 xyz 3 нулевой 4 тест 1 5 нулевой

Я написал этот запрос, чтобы сначала получить записи, в которых в ключе имени хранится нулевое значение.

SELECT *
FROM table 1
WHERE JSON_CONTAINS(column B, '{"name": null}', '$');

Теперь мне нужно обновить записи с помощью SQL-запроса, чтобы удалить объект из массива в столбце B таблицы 1. Таблице 1 должно понравиться это.

Таблица 1

Столбец А Столбец Б Ячейка 1 [{"id":1, "name":"abc"},{"id":2, "name":"xyz"}] Ячейка 2 [{"id":4, "имя":"тест 1"}]

Как я могу добиться этого без написания хранимых процедур?

Я попытался обновить одну запись, используя этот запрос

UPDATE table 1
SET column_B = JSON_ARRAY(
    JSON_OBJECT(
       "id", JSON_UNQUOTE(JSON_EXTRACT(column_B, '$[0].id')), 
       "name", JSON_UNQUOTE(JSON_EXTRACT(injuries, '$[0].name'))
    ),
)
WHERE id = 1;

Какую цель имеет таблица2? Вы не используете его в своем sql. Если ячейка содержит несколько или даже только имена с NULL, следует ли удалить их все, даже если при этом будет выделен весь столбец NULL для этой строки?

Jonas Metzler 05.06.2024 16:18

Смотрите мой ответ здесь: stackoverflow.com/a/71743929/20860

Bill Karwin 05.06.2024 16:59

table2 — это основная таблица, из которой данные извлекаются для хранения в столбце B table1, и да, если ячейка содержит несколько значений с нулевым именем, все они должны быть удалены, а если в ячейке есть только один объект с именем null, весь столбец будет нулевым для ряд.

tech_learner 06.06.2024 06:30

После долгих исследований и расследований я нашел решение... Пожалуйста, проверьте @tech_learner

Art Bindu 10.06.2024 14:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Существует функция JSON JSON_TABLE, которая используется для преобразования каждого массива JSON в количество объектов (строк) JSON, содержащихся в этом массиве JSON. Пусть, если массив JSON свяжется с объектом n JSON, он создаст n строки для каждого объекта, который существует в этом массиве JSON.

Например:
Давайте, мой вклад:

Я хочу сломать следующее:

set @jsonArray = JSON_ARRAY(
     JSON_OBJECT('key', 1, 'value', 'Data1'), 
     JSON_OBJECT('key', 2, 'value', 'Data2'), 
     JSON_OBJECT('key', 3, 'value', 'Data3')
);

select * 
from JSON_TABLE(
    @jsArray, '$[*]' COLUMNS (
        split_json_array JSON PATH '$'
    )
) AS JT

Аналогичным образом нам нужно преобразовать все значения массива JSON «Столбец B» в соответствующий формат. Затем нам нужно применить условие, split_json_array->>'$.name' = 'null' отфильтровать элементы JSON-массива «Столбец B», имя которых — выходы, а затем объединить эти данные.

Итак, соответствующий запрос:

WITH Base_Table_1 AS (
    select * from 
        Table_1,
        JSON_TABLE(column_B, '$[*]' COLUMNS (
            split_json_array JSON PATH '$'
        )) AS jt
),
filter_Table_1 AS (
    SELECT
        column_A,
        JSON_ARRAYAGG(split_json_array) AS column_B_filtered_data
    from Base_Table_1
    where split_json_array->>'$.name' != 'null'
    group by column_A
)
Select * from filter_Table_1;

Вывод:

Затем обновите значение Table_1 таблицы column_B из таблицы filter_Table_1:

UPDATE Table_1
SET column_B = (
    select filter_Table_1.column_B_filtered_data
    From filter_Table_1
    WHERE Table_1.column_A = filter_Table_1.column_A
);

Итак, последний Table_1 отображается как:

select * from Table_1;

Пример кода для живого тестирования: myCompiler

Для этого требуется много исследований и исследований, и я узнаю кое-что новое, связанное с обработкой данных MySQL JSON.

Я надеюсь, что ваша проблема разрешится.
Спасибо за этот вопрос.

Другие вопросы по теме