提问人:Aloof aloof 提问时间:2/4/2023 最后编辑:Bill KarwinAloof aloof 更新时间:2/4/2023 访问量:199
JSON_MERGE_PRESERVE具有独特的附加功能
JSON_MERGE_PRESERVE with unique additions
问:
我在表中有一列,它是对象数组。对象的架构是常量的。
喜欢这个:
col = [{"a": "a_value_1", "b": "b_value_1"}, {"a": "a_value_2", "b": "b_value_2"} ...]
现在,我想通过附加新值来更新列值,仅当它们尚未存在于数组中时。
我知道可以使用进行更新,但它只是附加值而不检查它是否已经存在。我基本上想要一个 json 集而不是 json 数组。JSON_MERGE_PRESERVE
例如
JSON_MERGE_PRESERVE_VARIATION (col, {"a": "a_value_1", "b": "b_value_1"}) = col
mysql中是否存在这样的查询?另外,我们仍在 5.7 版上
答:
0赞
TSCAmerica.com
2/4/2023
#1
我希望这会有所帮助
UPDATE table_name
SET col = JSON_ARRAY_APPEND(col, '$', JSON_OBJECT('a', 'a_value_3', 'b', 'b_value_3'))
WHERE NOT EXISTS (
SELECT 1
FROM JSON_TABLE(col, '$[*]' COLUMNS (
a VARCHAR(50) PATH '$.a',
b VARCHAR(50) PATH '$.b'
)) temp
WHERE temp.a = 'a_value_3' AND temp.b = 'b_value_3'
);
评论
0赞
Aloof aloof
2/7/2023
正如我在帖子中提到的,mysql版本是5.7。 仅在 MySQL 8 之后可用JSON_TABLE
评论
JSON_SEARCH()