【问题标题】:Append if not exists mysql json field如果不存在,则追加 mysql json 字段
【发布时间】:2019-05-09 16:59:53
【问题描述】:

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"]

有没有办法做到这一点?

【问题讨论】:

    标签: mysql json mysql-json


    【解决方案1】:

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

    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
    

    【讨论】:

    • 谢谢,关于这个问题的一个问题是,当我尝试执行JSON_CONTAINS(new, 'orange') 时,我收到以下 sql 错误:Invalid JSON text in argument 2 to function json_contains: "Invalid value."。这仅在mysql8上可用吗?我正在使用 5.7。
    • 必须是 '"orange"' 才能创建有效的 JSON 字符串。
    猜你喜欢
    • 2020-07-03
    • 2021-02-12
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多