根据另一个表中列的总和在一个表中设置两个值

时间:2014-11-06 00:28:02

标签: mysql join

我有两张桌子,一张"数据"包含数十万行的表格和一个"设置"有数百行的表。我需要更新设置表中的两个值,具体取决于数据表中一列的总和大于设置表中的另一列,其中' 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"。也许这里有人可以指出我正确的方向。

2 个答案:

答案 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

来源:Disable Safe Update

答案 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