如果不存在,则追加 mysql json 字段

Dav*_*542 2 mysql json mysql-json

JSONmysql 中是否有一个函数会忽略尝试添加元素(如果元素已经存在)?例如:

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', "orange")
where id=2;
Run Code Online (Sandbox Code Playgroud)

现在我的数组看起来像:

["apple", "orange", "orange", "orange", "orange"]
Run Code Online (Sandbox Code Playgroud)

但我希望它像一组一样工作,并且只是:

["apple", "orange"]
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Bar*_*mar 5

我不这么认为。您可以测试该值是否已经在WHERE子句中的 JSON 中。

update waitinglist SET
new = JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
AND NOT JSON_CONTAINS(new, '"orange"')
Run Code Online (Sandbox Code Playgroud)

如果您正在更新多个列并且需要IF()它只影响这一列,如果该值已经存在,您可以使用它保持不变。

update waitinglist SET
new = IF(JSON_CONTAINS(new, '"orange"'), new, JSON_ARRAY_APPEND(new, '$', '"orange"'))
where id=2
Run Code Online (Sandbox Code Playgroud)

  • 它需要是 `'"orange"'` 来创建一个有效的 JSON 字符串。 (3认同)