2013-05-02 122 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) 

上面的查詢將匹配的名稱和相應地更新性別。