2016-12-16 24 views
2

在表顏色中,有一個顏色列。我需要根據不同的條件對此列中的值進行5次更新。SQLite多個更新在一個查詢中

SET Color = 'Blue' WHERE Color = 'blue' 
SET Color = 'Green' WHERE Color = 'green' 
SET Color = 'Yellow' WHERE Color = 'yellow' 
SET Color = 'Brown' WHERE Color = 'brown' 
SET Color = 'Orange' WHERE Color = 'orange' 

我可以在一個查詢中對這個表進行5次更新嗎?

注:我的實際值比這更復雜,所以不顧簡單的功能,以使這些值大寫

+0

我不這麼認爲這是可能的,你應該寫單獨的查詢 –

回答

3

您可以使用CASE表達,並決定哪個值要設置爲Color

UPDATE [YourSchema].[Colors] 
SET  Color= CASE 
         WHEN Color = 'blue' THEN 'Blue' 
         WHEN Color = 'green' THEN 'Green' 
         WHEN Color = 'yellow' THEN 'Yellow' 
         WHEN Color = 'brown' THEN 'Brown' 
         WHEN Color = 'orange' THEN 'Orange' 
        END 
WHERE Color IN ('blue', 'green', 'yellow', 'brown', 'orange') 

注:如果您有默認的模式,然後使用dbo.Colors表名,

+1

你或許應該在'WHERE'子句添加所以'UPDATE'僅作用於包含應修改顏色的記錄。 –

+0

@TimBiegeleisen哎呀.. thanx ..更新了我的答案。 –

2

作爲替代冗長CASE表達,你可以簡單地做的第一個字母的條件uppercasing顏色應該與您在列表中給出的顏色相匹配。

update Colors 
set Color = upper(substr(Color, 1, 1)) || substr(Color, 2) 
where Color in ('blue', 'green', 'yellow', 'brown', 'orange') 
+0

完美的解決方案 –

+0

適合這種情況 - 我真的在尋找一個可以應用於更復雜的值的答案(不僅僅是更新大小寫的值) – Chicowitz

+1

@Chicowitz然後一個'CASE'表達式可以爲您提供更好的服務,但是這個查詢很適合你當前的問題。 –