У меня есть массив JSON, я хочу добавить запись, и эту запись следует удалить из массива JSON.
Например, массив:
SET @os ='[
{
"id": "66",
"date_end": "2022-01-09 18:00:00",
"occupied": "1",
"date_begin": "2022-01-09 17:30:00",
"idCategory": "[1,2,3]",
"date_requested": "2022-01-02 14:59:27"
},
{
"id": "39",
"date_end": "2022-01-03 11:30:00",
"occupied": "1",
"date_begin": "2022-01-03 08:00:00",
"idCategory": "3",
"date_requested": "2022-01-01 22:40:58"
}
]';
И запись, которую я хочу удалить:
SET @test ='
{
"id": "39",
"date_end": "2022-01-03 11:30:00",
"occupied": "1",
"date_begin": "2022-01-03 08:00:00",
"idCategory": "3",
"date_requested": "2022-01-01 22:40:58"
}';
Мой код выглядит примерно так:
SET @new_os = (select json_arrayagg(js) from json_table(@os, '$[*]' columns ( js json path '$')) as jt
where json_extract(js, '$.date_end') <> json_extract(@test, '$.date_end') and json_extract(js, '$.id') <> json_extract(@test, '$.id')
and json_extract(js, '$.date_begin') <> json_extract(@test, '$.date_begin') and json_extract(js, '$.date_requested') <> json_extract(@test, '$.date_requested')
and json_extract(js, '$.idCategory') <> json_extract(@test, '$.idCategory') and json_extract(js, '$.occupied') <> json_extract(@test, '$.occupied'));
SELECT @os,@new_os;
Но в итоге я получаю, что @new_os равно NULL, и должно быть так:
[
{
"id": "66",
"date_end": "2022-01-09 18:00:00",
"occupied": "1",
"date_begin": "2022-01-09 17:30:00",
"idCategory": "[1,2,3]",
"date_requested": "2022-01-02 14:59:27"
}]
1 ответ
Вместо фильтрации несовпадающих столбцов json
это может быть фильтрация совпадений столбцов.
SET @new_os = ( select json_pretty(json_arrayagg(os.js)) as new_os from json_table(@os, '$[*]' columns (js json path '$')) as os where not exists ( select 1 from json_table(@test, '$' columns ( js json path '$')) as tst where json_extract(os.js, '$.id') = json_extract(tst.js, '$.id') and json_extract(os.js, '$.date_end') = json_extract(tst.js, '$.date_end') and json_extract(os.js, '$.date_begin') = json_extract(tst.js, '$.date_begin') and json_extract(os.js, '$.date_requested') = json_extract(tst.js, '$.date_requested') and json_extract(os.js, '$.idCategory') = json_extract(tst.js, '$.idCategory') and json_extract(os.js, '$.occupied') = json_extract(tst.js, '$.occupied') )); SELECT @os, @new_os;
Демонстрация db<>fiddle здесь
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.