我有两张桌子。表#1'颜色'有[红色],[蓝色],[绿色]列;其中每列都是一个int类型,表示选择颜色的次数,它们可以说是计数器。
表#2'selected_colors'具有[person]和[color]列,其中person不是唯一的。对于每个人选择的颜色,将有一行包含[人物]和[颜色]。
我的问题是我重置了表#1中的计数器。不过,我仍然有表#2中的信息。我需要根据表#2上的查询设置颜色计数器。
简短问题:如何在SELECT结果中使用UPDATE?
答案 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
这将为您提供每个颜色及其计数的行,您无法轻松创建动态更改结果结构的查询(例如更改列)。它可能但是动态查询创建会有很多工作,而且根本不会有效。