【问题标题】:Updating a table based on some condition from another table根据另一个表中的某些条件更新表
【发布时间】:2011-08-04 18:58:34
【问题描述】:

我有两张桌子。表 #1 'color' 有 [red]、[blue]、[green] 列;其中每一列都是一个 int 类型,表示颜色被选择的次数,可以说是计数器。

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

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

小问题:如何从 SELECT 结果中使用 UPDATE?

【问题讨论】:

    标签: sql


    【解决方案1】:

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

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

    然后重复蓝色和绿色。

    【讨论】:

    • 太棒了!但是是否可以将其放入循环中以自动迭代每种颜色。我现在有60多种颜色。抱歉,我是 SQL 菜鸟,感谢您的回复。
    【解决方案2】:

    您是否有任何理由不使用 Table#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
    

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

    【讨论】:

    • 是否可以将其放入循环中以自动迭代每种颜色。我目前有 60 多种颜色,但没有设置每次都有什么颜色。就像绿色可能有一天会在那里,而不是第二天。有没有办法更通用地处理这个问题?提前致谢。
    • 你用的是什么服务器引擎 mysql,postgresql Microsoft SQL?
    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多