[英]Set two values in one table based on sum of a column in another table
我有兩個表,一個具有數十萬行的“數據”表,以及一個具有數十萬行的“設置”表。 我需要根據數據表中一列的總和大於設置表中另一列的總和來更新設置表中的兩個值,其中設置表的“ id”與數據表的“ offerid”匹配。
我一直在游說Google尋找許多可能的解決方案,但我似乎無法滿足我的需求。 每當我開始使用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"
。 也許有人可以指出我正確的方向。
由於您使用的是沒有分組的匯總函數(求和),因此會出錯。 因此查詢確實不知道應該將哪些行加在一起。 您可以使用如下子查詢:
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
來源: 禁用安全更新
嘗試使用
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.