2014-05-14 52 views
0

我一直在用這段代碼糟糕的時間。我想知道是否有人可以查看並告訴我如果CC_LIST已經包含匹配值,如何突破case語句。它保持連接,我希望它檢查由加入映射的電子郵件地址,然後打破如果電子郵件地址存在。下面是我的代碼:早起破案

UPDATE HD_TICKET 

JOIN USER ON USER.FULL_NAME = CUSTOM_FIELD_VALUE11 

SET HD_TICKET.CC_LIST = 

CASE WHEN HD_TICKET.CC_LIST = '' OR HD_TICKET.CC_LIST IS NULL THEN USER.EMAIL 
ELSE CONCAT(HD_TICKET.CC_LIST, ", ", USER.EMAIL) 
END 
where HD_TICKET.HD_QUEUE_ID = 12 
+1

這樣的問題是爲什麼你不應該在數據庫列中放置逗號分隔的列表。加入一個具有不同行中值的表。 – Barmar

+0

這是該字段所需的格式。它是一個電子郵件地址列表。 – user3634019

回答

0

我的建議是,爲您營造一個過程或函數來做到這一點 由於與功能,您可以選擇所有用戶,然後創建列表。

0

使用FIND_IN_SET來測試該值是否已經在列表中。在這種情況下,將列設置爲自身。

UPDATE HD_TICKET 

JOIN USER ON USER.FULL_NAME = CUSTOM_FIELD_VALUE11 

SET HD_TICKET.CC_LIST = 
    CASE WHEN HD_TICKET.CC_LIST = '' OR HD_TICKET.CC_LIST IS NULL THEN USER.EMAIL 
     WHEN FIND_IN_SET(USER.EMAIL, REPLACE(HD_TICKET.CC_LIST, ' ', '')) THEN HD_TICKET.CC_LIST 
     ELSE CONCAT(HD_TICKET.CC_LIST, ",", USER.EMAIL) 
    END 
where HD_TICKET.HD_QUEUE_ID = 12 
+0

這仍然允許它一遍又一遍地追加同一封電子郵件。 – user3634019

+0

不,它不。如果電子郵件已經在列表中,則FIND_IN_SET爲真。在這種情況下,它不會追加它。 – Barmar

+0

不要在逗號後面放一個空格,我不認爲'FIND_IN_SET'在匹配之前修剪空格。 – Barmar