0
SELECT id,100.0/(SELECT SUM(points) FROM data)*points AS reward,points FROM data;

我遇到的第一个问题是,我认为多次运行内部选择效率不高,最好使用什么连接。

第二个问题是我正在使用生成的数据集生成数百个单独的更新查询,我如何从一个查询中的选择中更新?

IE

UPDATE aggregate AS a SET a.reward=a.reward+data.reward
SELECT ...
WHERE a.dataid = data.id
4

1 回答 1

1

第一个问题的答案是将查询移至from子句。

您的第二个答案是在以下位置进行join查询update

UPDATE aggregate a join
   (SELECT id, 100.0/sump*points AS reward, points
    FROM data cross join
         (SELECT SUM(points) as sump
          FROM data
         ) const
   ) ds
   on a.dataid = ds.id
SET a.reward = a.reward + ds.reward;
于 2013-09-06T02:12:10.747 回答