Name | Gender
--------------
A | F
B | M
C | F
D | F
E | M
根据以上数据,错误地输入了性别,这意味着代替F
它应该是M
而代替M
它应该F
。如何用单行sql查询更新整个表(不要使用pl / sql块)。因为,如果我要逐个更新性别列,那么可能的错误就是性别列的所有行值都变为F
或M
。
最终输出应为
Name | Gender
--------------
A | M
B | F
C | M
D | M
E | F
答案 0 :(得分:3)
试试这个..
Update TableName Set Gender=Case when Gender='M' Then 'F' Else 'M' end
使用Select ...
在OP请求.update上Update TableName T Set Gender=(
Select Gender from TableName B where T.Gender!=B.Gender and rownum=1);
答案 1 :(得分:3)
update table_name
set gender = case when gender = 'F' then 'M'
when gender = 'M' then 'F'
end
SQL适用于Set theory
原则,因此更新是并行发生的,而不是
需要临时存储来存储值,然后像我们一样覆盖
交换两个值时的其他编程语言。
答案 2 :(得分:1)
进行此类更新的正确方法是Amit singh first answered。
但是如果你真的想在你的更新中有一个select statement
(知道原因),那么你可以这样做:
update table1 t
set Gender = (select case when i.Gender = 'F' Then 'M' else 'F' end
from table1 i
where i.Name = t.Name);
答案 3 :(得分:0)
sql server示例,但同样适用
声明@Table TABLE ( Id int, 值char(1) )
插入@Table
选择1,'F'
union选择2,'F'
union选择3,'F'
union选择4,'M'
union选择5,'M'
union选择6,'M'
从@Table
中选择*更新@Table set Value = case当Value ='F'然后'M'当Value ='M'然后'F',否则Value End
从@Table
中选择*答案 4 :(得分:0)
你可以试试这个: -
update [table] a
set Gender=(select case when gender='F' then 'M' else 'F' end from [table] b
where a.name=b.name)
以上查询将与名称匹配,并相应地更新性别。