MySQL - 如果满足条件,则向行添加一个或多个文本

MySQL - Add text or texts to a row if conditions are satisfied

对不起,如果问题很基础,我正在学习MySQL。

假设我有这样一个 table:

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

我想根据条件更新 Con 列,比如如果列小于 3 则添加列名。我不想写每个条件,而是想用 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 函数被调用一次并且 return 只有一个值。如果两列都满足条件,如何将此代码更改为 return 所有列(第 3 行)?谢谢。

您在找这样的东西吗?

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演示