2011-08-04 111 views
0

我有兩個表。表#1'顏色'有列[紅色],[藍色],[綠色];每列都是一個int類型,表示顏色被選中的次數,可以這麼說。基於某個條件從另一個表更新表

表#2'selected_colors'具有列[person]和[color],其中person不是唯一的。對於每個人選擇的顏色,將會有一行包含[person]和[color]。

我的問題是我已經重置表#1中的計數器。但是,我仍然在表2中列出了相關信息。我需要根據表#2上的查詢設置顏色計數器。

簡短的問題:如何使用來自SELECT結果的UPDATE?

回答

1

沒有看到你的表定義或示例數據,並考慮你只有3種顏色,這是一次過的工作試試這個:

UPDATE [color] SET [red] = SELECT COUNT(1) FROM [selected_colors] WHERE [color] = 'red' 

再次爲藍色和綠色。

+0

太棒了!但是有可能把它放到一個循環中來自動迭代每種顏色。目前我有超過60種顏色。對不起,我是SQL中的noob,感謝您的回覆。 – Ronald

1

是否有任何理由不使用表#1的視圖?

Create View color AS 
select r.red,blue,green from 

(select count(color) as red from selected_colours where color='red') AS r, 
(select count(color) as red from selected_colours where color='blue') AS b, 
(select count(color) as red from selected_colours where color='green') AS g 

或者你的更新查詢應該是

update color set red=r.red,blue=b.blue,green=g.green from 
(select count(color) as red from selected_colours where color='red') AS r, 
(select count(color) as red from selected_colours where color='blue') AS b, 
(select count(color) as red from selected_colours where color='green') AS g 

編輯 - 有關動態顏色註釋之後。

您應該創建一個視圖

Create View color AS 
select color, count(color) as count from selected_colors group by color 

這會給你一個有一排用其計數每一種顏色,你不能簡單的創建一個查詢,會動態改變的結果的結構(例如,改變列)。它的可能性,但它會與動態查詢創建很多工作,它不會有效。

+0

是否可以將其放入循環中以自動迭代每種顏色。我現在有超過60種顏色,並且每次都沒有設置顏色。像綠色可能有一天,而不是第二天。有沒有辦法更通用地處理這個問題?提前致謝。 – Ronald

+0

您使用mysql,postgresql Microsoft SQL的服務器引擎是什麼? –

相關問題