如何在MySQL中组合互斥列

ale*_*ror 4 mysql sql

我有一个包含多个互斥列的数据库(不要问我为什么,有人像那样创建它.叹气).下面是一个例子.

-------------------------------------------
| ID | BLACK | WHITE | RED | GREEN | BLUE |
-------------------------------------------
| 1  | 1     | 0     | 0   | 0     | 0    |
-------------------------------------------
| 2  | 0     | 0     | 1   | 0     | 0    |
-------------------------------------------
| 3  | 0     | 1     | 0   | 0     | 0    |
-------------------------------------------
Run Code Online (Sandbox Code Playgroud)

嗯,你明白了,它包含了数千条记录.现在,我如何将它组合成一个"COLOR"列.如下.

--------------
| ID | COLOR |
--------------
| 1  | BLACK |
--------------
| 2  | RED   |
--------------
| 3  | WHITE |
--------------
Run Code Online (Sandbox Code Playgroud)

我现在能想到的就是做其中的5个

UPDATE table SET COLOR = 'BLACK' WHERE BLACK = 1
Run Code Online (Sandbox Code Playgroud)

哦,我忘了提及,我目前正在处理的表包含至少 15个互斥列!有没有更简单的方法可以做到这一点?


将更改的颜色编辑为COLOR

Jim*_*son 6

使用a case-expression,如下面的缩写示例所示:

update table
  set color= 
    case
      when black then "black"
      when red   then "red"
      when blue  then "blue"
    end;
Run Code Online (Sandbox Code Playgroud)

这是一个方形的