不使用临时表更新列数据

Update column data without using temporary tables

有一个叫做EMP的table,还有一个叫做Gender的列,定义为VARCHAR(1),所以'M'代表男性,'F' 为女性。一位开发人员不小心将 'M' 更改为 'F',将 'F' 更改为 'M'。

如何在不使用温度的情况下更正此问题table?

使用这 3 个更新语句:

update EMP set gender='X' where gender='M';
update EMP set gender='M' where gender='F';
update EMP set gender='F' where gender='X';

您可以使用 case 表达式:

UPDATE emp
SET    gender = CASE gender WHEN 'M' THEN 'F' ELSE 'M' END

编辑:
为简单起见,上述声明假设 'M''F' 是唯一的两个选项——没有 nulls,没有未知数,没有任何东西。一个更健壮的查询可以消除这个假设,只是严格替换 Ms 和 Fs,而其他可能的值保持不变:

UPDATE emp
SET    gender = CASE gender WHEN 'M' THEN 'F' 
                            WHEN 'F' THEN 'M'
                            ELSE gender
                END