我有一个包含以下列的表:
ID, Name, Designation, Salary, Contact, Address, Gender
意外地,对于所有男性,我已经进入'女性',同样对于所有女性,我已经进入'男性'。对于Exmaple
0023 Scott Developer 15000 4569865 Cliff_Eddington,USA Female
我上面的那行应该是男性而不是女性。并且所有男性的性别都已更新为女性。所有女性性别的相同案例已更新为男性。
是否有任何单一查询我可以通过该查询更改性别为男性的所有行将其更改为女性以及性别为女性的所有行将其更改为男性。
答案 0 :(得分:7)
这应该做到
UPDATE tbl SET Gender = (CASE WHEN Gender = 'Male' THEN 'Female' ELSE 'Male' END)
(对不起,是mysql语法,修复了ms-sql)
答案 1 :(得分:5)
我会在运行更新之前运行SELECT COUNT(*)
,以便您获得正确的结果,然后COMMIT
该事务:
BEGIN TRANSACTION
UPDATE tableA
SET Gender = CASE
WHEN Gender = 'Male' THEN 'Female'
ELSE 'Male'
END
--COMMIT TRANSACTION
--ROLLBACK TRANSACTION
答案 2 :(得分:3)
您可以尝试类似
的内容UPDATE TABLE
SET Gendeer = CASE
WHEN Gender = 'Male'
THEN 'Female'
ELSE 'Male'
END
答案 3 :(得分:0)
1)第一种方法
Update <i>Table_Name</i><br/>
Set <i>Column_Name</i> = Case <i>Column_Name</i> <br/> When 'M' then 'F'<br/> When 'F' then 'M'<br/> End
2)第二种方法
Update <i>Table_Name</i><br/>
Set <i>Column_Name</i> = IF('M','F','M')
答案 4 :(得分:0)
这是正确的。
UPDATE dbo.EmpGender
SET Gender = (CASE
WHEN Gender = 'MALE' THEN 'FEMALE' ELSE 'MALE'
END)
IF YOU DONT WANT TO USE CASE STATEMENT THEN.
UPDATE dbo.EmpGender
SET Gender = REPLACE(('fe'+Gender),'fefe','')
IN SQL 2012 YOU CAN USE
UPDATE dbo.EmpGender
SET Gender = IIF(Gender = 'male', 'female', 'male')
答案 5 :(得分:0)
UPDATE GENDER(TABLE NAME)
SET GENDER(COLUMN NAME) = CASE WHEN GENDER(COLUMNNAME)='MALE'
THEN 'FEMALE'
ELSE 'MALE'
END;
这里我的表名和列名相同,因此在括号中明确指出。
答案 6 :(得分:0)
有点旧帖子,使用IF交换性别应该比使用CASE时快一点:
UPDATE table
SET Gender = IF(GENDER='Male','Female','Male');
答案 7 :(得分:0)
如果您正在寻找一种通用的方式,也可以使用以下查询。我不会说这种方法更快或更简单,但是它将对所有关系数据库都是通用的。我来这里是为了查找没有DECODE和CASE语句的查询,并找到了这个答案。所以想分享这个。
UPDATE tableA SET Gender = 'Temp' WHERE Gender = 'Male';
UPDATE tableA SET Gender = 'Male' WHERE Gender = 'Female';
UPDATE tableA SET Gender = 'Female' WHERE Gender = 'Temp';