2013-05-02 80 views
3

面试官更新表值问了我一个问题,这似乎很容易,但我无法弄清楚,如何解决这个专访:使用select语句

Name | Gender 
-------------- 
A  | F 
B  | M 
C  | F 
D  | F 
E  | M 

从以上数据来看,被错误地输入性别,这意味着代替F它应该是M并且代替M它应该F。如何用单行sql查询更新整个表(不要使用pl/sql块)。因为如果我将逐一更新性别列,那么可能的错误将是性别列的所有行值变为FM

最终输出应该是

Name | Gender 
-------------- 
A  | M 
B  | F 
C  | M 
D  | M 
E  | F 

回答

2

试试这个..

Update TableName Set Gender=Case when Gender='M' Then 'F' Else 'M' end 

在OP request..update使用选择...

Update TableName T Set Gender=(
Select Gender from TableName B where T.Gender!=B.Gender and rownum=1); 

SQL FIDDLE DEMO

+0

是......这是我的回答也一样,但他说,“这是确定的,我需要使用SELECT语句的解决方案。”即使我使用“解码”功能。 – Ravi 2013-05-02 04:09:30

+0

使用选择工具使用select – 2013-05-02 04:12:34

+0

是...更新表使用select语句 – Ravi 2013-05-02 04:13:14

0

SQL服务器的例子,但同样适用

声明@Table TABLE ( ID INT, 值炭(1) )

插入件插入@Table

选择1, 'F'

union select 2,'F'

union select 3,'F'

工会选择4, 'M'

工会选择5, 'M'

工会选择6, 'M'

SELECT * FROM @Table

更新@Table设定值=情况下,当值= 'F' 然后 'M' 时值= 'M' 然后 'F' 其他价值结束

SELECT * FROM @Table

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); 

Here is a sqlfiddle demo

1
update table_name 
set gender = case when gender = 'F' then 'M' 
         when gender = 'M' then 'F' 
        end 

SQL适用于Set theory原则,所以更新是并行发生的,你不 需要临时存储重写就像我们在其他 编程语言做之前将值存储,同时交换两个VA梅毒。

0

你可以试试这个: -

update [table] a 
set Gender=(select case when gender='F' then 'M' else 'F' end from [table] b 
where a.name=b.name) 

上面的查询将匹配的名称和相应地更新性别。