2014-02-13 38 views
0

我做錯了什麼,我不斷收到有關語法的錯誤。Mysql更新聲明與案件不工作

UPDATE common_lookup  
SET  common_lookup_column = 
CASE 
    WHEN common_lookup_table = 'MEMBER' THEN 
    CASE 
     WHEN common_lookup_type IN ('INDIVIDUAL', 'GROUP') THEN 
     common_lookup_table || '_TYPE' 
     WHEN common_lookup_type LIKE '%CARD' THEN 
     'CREDIT_CARD_TYPE' 
    END 
    ELSE 
    common_lookup_table || '_TYPE' 
END; 
+0

什麼是「 「_TYPE''? – cyadvert

+0

你缺少'END CASE;'。兩次。 https://dev.mysql.com/doc/refman/5.0/en/case.html – cyadvert

回答

2

在MySQL,使用concat()功能:

UPDATE common_lookup  
    SET common_lookup_column = (CASE WHEN common_lookup_table = 'MEMBER' 
            THEN (CASE WHEN common_lookup_type IN ('INDIVIDUAL', 'GROUP') 
               THEN concat(common_lookup_table, '_TYPE') 
               WHEN common_lookup_type LIKE '%CARD' 
               THEN 'CREDIT_CARD_TYPE' 
              END) 
            ELSE concat(common_lookup_table, '_TYPE') 
           END); 

假設你不打算從內caseNULL值,可以簡化這個邏輯:

UPDATE common_lookup  
    SET common_lookup_column = (CASE WHEN common_lookup_table = 'MEMBER' AND 
              common_lookup_type LIKE '%CARD' 
            THEN 'CREDIT_CARD_TYPE' 
            ELSE concat(common_lookup_table, '_TYPE') 
           END); 

操作||是幾個數據庫中的字符串連接運算符ASES。