根据另一个表中的某些条件更新表

时间:2011-08-04 10:33:25

标签: sql

我有两张桌子。表#1'颜色'有[红色],[蓝色],[绿色]列;其中每列都是一个int类型,表示选择颜色的次数,它们可以说是计数器。

表#2'selected_colors'具有[person]和[color]列,其中person不是唯一的。对于每个人选择的颜色,将有一行包含[人物]和[颜色]。

我的问题是我重置了表#1中的计数器。不过,我仍然有表#2中的信息。我需要根据表#2上的查询设置颜色计数器。

简短问题:如何在SELECT结果中使用UPDATE?

2 个答案:

答案 0 :(得分:1)

如果没有看到您的表格定义或示例数据,并且考虑到您只有3种颜色并且这是一次性的练习,请尝试以下操作:

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

并重复蓝色和绿色。

答案 1 :(得分: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

这将为您提供每个颜色及其计数的行,您无法轻松创建动态更改结果结构的查询(例如更改列)。它可能但是动态查询创建会有很多工作,而且根本不会有效。