我有一个这样的表:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 1 |
| 2 | 1 |
| 3 | 0 |
| 4 | NULL |
+---------+------------+
这是我的问题:
UPDATE numbers SET numb = numb ^ b'1';
这里是电流输出:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | NULL |
+---------+------------+
这里是预期输出:
// numbers
+---------+------------+
| id | numb |
+---------+------------+
| int(11) | bit(1) |
+---------+------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 1 |
+---------+------------+
正如你所看到的,我所要做的就是使1
成为NULL ^ b'1'
的结果(当前结果为NULL
)。我该怎么做?
该任务结合了两个问题:
- 翻转一点,然后
- 处理
NULL
您可以将另一个问答中的位切换解决方案结合起来;与IFNULL
一样,易于阅读的解决方案:
UPDATE numbers SET numb = IFNULL(numb ^ b'1', 1)
这几乎是你的问题的逐字翻译:
- "翻转位值"-
numb ^ b'1'
- "如果是
NULL
,则设置1
"-IFNULL(..., 1)