2015-04-30 40 views
0

對不起,如果問題很基本,我正在學習MySQL。MySQL - 在滿足條件的情況下將文本或文本添加到行中

比方說,我有一個表是這樣的:

+---+---+-----+ 
|A |B |Con | 
+---+---+-----+ 
|3 |3 |  | 
|2 |3 |  | 
|3 |2 |  | 
|2 |2 |  | 
+---+---+-----+ 

我想基於一個條件,說如果列小於3.不要寫每一個條件添加列名更新Con列,我想添加一個文本到列與concat功能,如果滿足條件:

update table 
    set Con = 
     case 
      when A < 3 
       then concat(' A ') 
      when B < 3 
       then concat(' B ') 
     end 

所以,我想是這樣的:

+---+---+-----+ 
|A |B |Con | 
+---+---+-----+ 
|3 |3 |  | 
|2 |3 |A | 
|3 |2 |B | 
|2 |2 |A B | 
+---+---+-----+ 

但是,這當然不起作用,因爲case函數被調用一次並且只返回一個值。如果條件滿足兩列,我該如何更改此代碼以返回所有列(第三行)?謝謝。

+1

似乎是[FizzBu​​zz問題](http://en.wikipedia.org/wiki/Fizz_buzz#Other_uses)的SQL變體。 –

回答

2

你在找這樣的嗎?

UPDATE table1 
    SET con = CONCAT(CASE WHEN A < 3 THEN ' A ' ELSE '' END, 
        CASE WHEN B < 3 THEN ' B ' ELSE '' END); 

這裏是一個SQLFiddle演示


多一點簡潔版本保持NULLS(如果你需要它)

UPDATE table1 
    SET con = NULLIF(CONCAT(IF(A < 3, ' A ', ''), IF(B < 3, ' B ', '')), ''); 

這裏是一個SQLFiddle演示

相關問題