不使用临时表更新列数据

时间:2015-01-13 07:00:53

标签: mysql sql sql-update

有一个名为EMP的表格和一个名为Gender的列,其定义为VARCHAR(1),因此' M'对于男性和' F'对于女性。一位开发人员意外地改变了M'到' F'和' F'到了' M'。

如何在不使用临时表的情况下纠正此问题?

2 个答案:

答案 0 :(得分:4)

您可以使用case表达式:

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

编辑:
上面的陈述假设,为简单起见,'M''F'是唯一的两个选项 - 没有null s,没有未知数,没有任何内容。更强大的查询可以消除这种假设,并且只是严格替换MF,而不会触及其他可能的值:

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

答案 1 :(得分:2)

使用这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';