我有两张桌子,一张"数据"包含数十万行的表格和一个"设置"有数百行的表。我需要更新设置表中的两个值,具体取决于数据表中一列的总和大于设置表中的另一列,其中' id'设置表的匹配' offerid'数据表。
我一直在寻找许多可能的解决方案,但我似乎无法根据自己的需求改变其中任何一种解决方案。每当我开始与Joins合作时,我都不可避免地被绊倒了。
我最近的尝试没有用,是:
UPDATE settings a, data b
SET a.hidden=1, a.weight=0
WHERE a.id = b.offerid
AND sum(b.views) > a.target
我喜欢这种方法,因为我认为它对我来说实际上是有意义的,但我得到的只是"Error code 1111: Invalid us of group function"
。也许这里有人可以指出我正确的方向。
答案 0 :(得分:1)
它出错,因为您正在使用没有分组的聚合函数(sum)。所以查询确实不知道应该将哪些行相加在一起。你可以使用这样的子查询:
UPDATE settings a
INNER JOIN
(
SELECT
sum(b.views) sumviews, b.offerid
from data b
group by b.offerid
) c on c.offerid = a.id
SET a.hidden=1, a.weight=0
where c.sumviews>a.target
编辑:要禁用安全更新功能,请执行以下步骤
在执行UPDATE命令之前,请执行以下步骤:
Go to Edit --> Preferences Click "SQL Queries" tab and uncheck "Safe Updates" check box Query --> Reconnect to Server Now execute your sql query
答案 1 :(得分:-1)
尝试使用
HAVING
而不是
AND
所以你的代码就像:
UPDATE settings a, data b
SET a.hidden=1, a.weight=0
WHERE a.id = b.offerid
GROUP BY a.id
HAVING sum(b.views) > a.target