我有一张这样的表:
// 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
)。我怎么能这样做?
答案 0 :(得分:1)
该任务结合了两个问题:
NULL
您可以将bit-toggling solution与IFNULL
中的{{3}}结合使用,以获得易于阅读的解决方案:
UPDATE numbers SET numb = IFNULL(numb ^ b'1', 1)
这是您的问题的几乎逐字翻译:
numb ^ b'1'
1
NULL
" - IFNULL(..., 1)