相关疑难解决方法(0)

MySQL/SQL:使用更新表本身的相关子查询进行更新

我有一个通用的问题,我将尝试使用一个例子来解释.

假设我有一个包含字段的表:"id","name","category","appearances"和"ratio"

我的想法是,我有几个项目,每个项目都与一个类别有关并且多次"出现".比率字段应包括每个项目出现的百分比,超出该类别中项目的总出现次数.

在伪代码中我需要的是以下内容:

  • 对于每个类别,
    查找与其相关的项目的外观总和.例如,它可以用(select sum("appearances") from table group by category)完成

  • 对于每个项目,
    将比率值设置为项目的外观除以上面类别的总和

现在,我正在尝试使用单个更新查询来实现此目的,但似乎无法做到这一点.我认为我应该做的是:

update Table T    
set T.ratio = T.appearances /   
(    
select sum(S.appearances)    
from Table S    
where S.id = T.id    
)
Run Code Online (Sandbox Code Playgroud)

但MySQL不接受更新列中的别名T,我没有找到实现此目的的其他方法.

有任何想法吗?

mysql sql correlated-subquery sql-update

20
推荐指数
2
解决办法
4万
查看次数

使用SELECT查询加速UPDATE

我有两张桌子:

  • 表1有Episode和Code,Episode为distinct.
  • 表2有Episode和Code,但Episode并不明显(表中的其他字段,与任务无关,使每一行都是唯一的).

我希望将每个剧集的表1的代码复制到表2.目前执行此操作的代码如下:

UPDATE Table2
SET Table2.Code = (SELECT TOP 1 Code FROM Table1 WHERE Episode = Table2.Episode)
Run Code Online (Sandbox Code Playgroud)

这需要数小时和数小时.(我不确切知道多少小时,因为我在大约20小时的时候取消了它.)他们大桌子,但肯定有更快的方法吗?

sql-server optimization sql-server-2005

0
推荐指数
1
解决办法
755
查看次数