7

我写了一个存储过程sqlyog。它很长并且执行除了concat语句之外的所有所需功能,因此我将仅列出该特定查询。

UPDATE recipes_new 
SET co_auths = CONCAT(co_auths,',',c1id) 
WHERE id = name_in; 

我基本上想要在两个字段中进行分隔,并且该语句放置在游标中,因此它是迭代的。co_auths目前为空,所以我得到的结果是,1,2,3我希望它是1,2,3。任何猜测最合适的解决方案是什么?

4

3 回答 3

7

通过使用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; 
于 2013-02-22T14:40:05.597 回答
1

这应该可以CASE用来检查它是否为NULL:

CONCAT(
    CASE 
        WHEN IFNULL(co_auths,'') = ''
        THEN '' 
        ELSE CONCAT(co_auths, ',') 
    END, c1id)
于 2013-02-22T14:39:01.977 回答
1

MySQL 返回一个空字段: CONCAT(nonEmpty1,empty2,nonEmpty3) = NULL CONCAT_WS 是你要找的

UPDATE recipes_new SET co_auths = CONCAT_WS(co_auths,',',c1id) WHERE id = name_in; 
于 2013-02-22T14:41:25.690 回答