【问题标题】:MySQL - Add text or texts to a row if conditions are satisfiedMySQL - 如果满足条件,则将文本或文本添加到行
【发布时间】:2015-07-09 14:29:42
【问题描述】:

对不起,如果问题是基本的,我正在学习 MySQL。

假设我有一张这样的桌子:

+---+---+-----+
|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 函数被调用一次并且只返回一个值。如果两列都满足条件,如何更改此代码以返回所有列(第 3 行)?谢谢。

【问题讨论】:

标签: mysql concat string-concatenation


【解决方案1】:

你在寻找这样的东西吗?

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

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 2021-08-03
    • 2021-10-15
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多