我写了一个存储过程sqlyog
。它很长并且执行除了concat语句之外的所有所需功能,因此我将仅列出该特定查询。
UPDATE recipes_new
SET co_auths = CONCAT(co_auths,',',c1id)
WHERE id = name_in;
我基本上想要在两个字段中进行分隔,并且该语句放置在游标中,因此它是迭代的。co_auths
目前为空,所以我得到的结果是,1,2,3我希望它是1,2,3。任何猜测最合适的解决方案是什么?
我写了一个存储过程sqlyog
。它很长并且执行除了concat语句之外的所有所需功能,因此我将仅列出该特定查询。
UPDATE recipes_new
SET co_auths = CONCAT(co_auths,',',c1id)
WHERE id = name_in;
我基本上想要在两个字段中进行分隔,并且该语句放置在游标中,因此它是迭代的。co_auths
目前为空,所以我得到的结果是,1,2,3我希望它是1,2,3。任何猜测最合适的解决方案是什么?
通过使用IF
:
UPDATE recipes_new
SET co_auths = IF(co_auths IS NULL, c1id, CONCAT(co_auths, ',', c1id))
WHERE id = name_in;
如果 的值为co_auths
空字符串而不是NULL
:
UPDATE recipes_new
SET co_auths = IF(LENGTH(co_auths), CONCAT(co_auths, ',', c1id), c1id)
WHERE id = name_in;
这应该可以CASE
用来检查它是否为NULL:
CONCAT(
CASE
WHEN IFNULL(co_auths,'') = ''
THEN ''
ELSE CONCAT(co_auths, ',')
END, c1id)
MySQL 返回一个空字段: CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL CONCAT_WS 是你要找的
UPDATE recipes_new SET co_auths = CONCAT_WS(co_auths,',',c1id) WHERE id = name_in;