如果不存在则追加 mysql json 字段
Append if not exists mysql json field
mysql 中是否有一个 JSON
函数会忽略尝试添加已存在的元素?例如:
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
现在我的数组看起来像:
["apple", "orange", "orange", "orange", "orange"]
但我希望它像一组一样工作,并且只是:
["apple", "orange"]
有办法吗?
我不这么认为。可以在WHERE
子句中测试值是否已经在JSON中。
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
AND NOT JSON_CONTAINS(new, '"orange"')
如果您正在更新多列并且需要它只影响这一列,如果值已经存在,您可以使用 IF()
使其保持不变。
update waitinglist SET
new = IF(JSON_CONTAINS(new, '"orange"'), new, JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
mysql 中是否有一个 JSON
函数会忽略尝试添加已存在的元素?例如:
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
现在我的数组看起来像:
["apple", "orange", "orange", "orange", "orange"]
但我希望它像一组一样工作,并且只是:
["apple", "orange"]
有办法吗?
我不这么认为。可以在WHERE
子句中测试值是否已经在JSON中。
update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
AND NOT JSON_CONTAINS(new, '"orange"')
如果您正在更新多列并且需要它只影响这一列,如果值已经存在,您可以使用 IF()
使其保持不变。
update waitinglist SET
new = IF(JSON_CONTAINS(new, '"orange"'), new, JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2