2011-08-04 83 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的服务器引擎是什么? –

相关问题