2015-04-30 25 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演示

相关问题