2013-02-22 59 views
5

我寫了一個存儲過程在sqlyog。它非常長,並且除了concat語句外,還執行所有所需的功能,因此我只會列出該特定查詢。在使用concat的同時獲得一個額外的逗號'''

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

我基本上要在這兩個領域的分離及本聲明放置在一個光標,它是迭代。 co_auths目前爲空,所以我得到的結果爲,1,2,3在那裏,因爲我想它是1,2,3。任何猜測什麼是最合適的解決方案?

回答

6

通過使用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; 
+0

這個IF應該放在更新查詢中嗎? – Shahzaib 2013-02-22 14:51:34

+0

UPDATE recipes_new SET co_auths =(IF(co_auths IS NULL,c1id,CONCAT(co_auths,',',c1id))WHERE id = name_in);我是對的,因爲即時獲取錯誤 – Shahzaib 2013-02-22 14:58:08

+0

我仍然得到,1,2,3 – Shahzaib 2013-02-22 15:02:26

2

這應該使用CASE來檢查它是否是NULL:

CONCAT(
    CASE 
     WHEN IFNULL(co_auths,'') = '' 
     THEN '' 
     ELSE CONCAT(co_auths, ',') 
    END, c1id) 
+0

問題仍然存在 – Shahzaib 2013-02-22 14:48:06

+0

@Shahzaib - 更新了答案,檢查空和空 - 好運! – sgeddes 2013-02-22 15:07:42