json_remove 在第二个 运行 上从数组中删除了错误的值
json_remove is removing the wrong value from array on second run
我正在尝试从 json 数组中删除一个值,但是我遇到了问题。
首先,我将数组插入到 table 中,如下所示:
INSERT into demo (hint) VALUES ('["Hello","World"]');
接下来,当我 运行 这个查询时, World
值被删除,这是应该发生的。但是,如果我第二次 运行 它,那么 Hello
值将被删除,这是不应该发生的。我做错了什么,或者从 json 数组中删除项目的更好方法是什么?
UPDATE demo SET hint = json_remove(
hint,
(SELECT json_each.fullkey FROM demo, json_each(demo.hint) WHERE json_each.value = 'World')
);
select * from demo;
作为json_remove()
returns null
的路径参数的子查询第二次执行更新语句,因为没有"World"
json数组。
在这种情况下 json_remove()
也 returns null
.
如果您的 SQLite 版本是 3.33.0+,您可以使用 UPDATE...FROM
语法:
UPDATE demo AS d
SET hint = json_remove(d.hint, j.fullkey)
FROM json_each(d.hint) AS j
WHERE j.value = 'Hello';
我正在尝试从 json 数组中删除一个值,但是我遇到了问题。
首先,我将数组插入到 table 中,如下所示:
INSERT into demo (hint) VALUES ('["Hello","World"]');
接下来,当我 运行 这个查询时, World
值被删除,这是应该发生的。但是,如果我第二次 运行 它,那么 Hello
值将被删除,这是不应该发生的。我做错了什么,或者从 json 数组中删除项目的更好方法是什么?
UPDATE demo SET hint = json_remove(
hint,
(SELECT json_each.fullkey FROM demo, json_each(demo.hint) WHERE json_each.value = 'World')
);
select * from demo;
作为json_remove()
returns null
的路径参数的子查询第二次执行更新语句,因为没有"World"
json数组。
在这种情况下 json_remove()
也 returns null
.
如果您的 SQLite 版本是 3.33.0+,您可以使用 UPDATE...FROM
语法:
UPDATE demo AS d
SET hint = json_remove(d.hint, j.fullkey)
FROM json_each(d.hint) AS j
WHERE j.value = 'Hello';