首页 > 解决方案 > JSON_ARRAY_APPEND() 如果目标值为空则拒绝 Mysql

问题描述

这是场景,将用户 ID 添加到user_details. 如果external_id配置文件表中不存在怎么办,它会返回null(select 语句返回null)。

如何JSON_ARRAY_APPEND拒绝查询并且不添加到user_detailsJSON 列。

UPDATE column1 SET user_details= JSON_SET(user_details, "$.ids", IFNULL(user_details->'$.ids',JSON_ARRAY())),
user_details= JSON_ARRAY_APPEND(user_details, "$.ids", (Select id from column2 where external_id='999999999999999'))
where id = 880; 

谢谢

标签: mysqljsonselectmysql-json

解决方案


WHERE在语句的子句中检查这一点UPDATE

UPDATE column1 SET user_details= JSON_SET(user_details, "$.ids", IFNULL(user_details->'$.ids',JSON_ARRAY())),
user_details= JSON_ARRAY_APPEND(user_details, "$.ids", (Select id from column2 where external_id='999999999999999'))
where id = 880
AND EXISTS (Select id from column2 where external_id='999999999999999')

或者使用 aJOIN而不是嵌套子查询。

UPDATE column1 AS c1
CROSS JOIN column2 AS c2
SET user_details= JSON_SET(c1.user_details, "$.ids", IFNULL(c1.user_details->'$.ids',JSON_ARRAY())),
    c1.user_details= JSON_ARRAY_APPEND(c1.user_details, "$.ids",c2.id)
WHERE c1..id = 880
AND c2.external_id = '999999999999999'

推荐阅读