2011-07-14 132 views
3

是否可以在1條語句中執行以下操作,而不是2條。 我需要爲一個ID設置isActive標誌並將所有其他標誌設置爲false。 即時通訊使用postgres數據庫。在一條語句而不是兩條SQL語句中更新

tblNames 
------------------------ 
id,name,isActive 
1,'n1',true 
2,'n2',false 
3,'n3',false 
4,'n4',false 

update tblnames 
set isActive = true 
where id = 4 

update tblnames 
set isActive = false 
where id != 4 

回答

4

運作的?

update tblnames 
set isActive = (id = 4) 

如果它不(我不知道Postgres的語法不夠好),這必將工作:

update tblnames 
set isActive case id when 4 then true else false end 
+0

這工作謝謝 – ender

2
update tblnames 
set isActive = (id = 4) 

不知道你是否能在更新使用布爾表達式,但它是值得一試;)

+0

MB isActive =(ID == 4) – stukselbax

+0

此作品謝謝 – ender

0
UPDATE tblnames 
    SET isActive = CASE 
        WHEN id = 4 THEN TRUE 
        WHEN id <> 4 THEN FALSE 
        END 
WHERE id IS NOT NULL;