2016-11-24 36 views
0

我需要使用2列(mixedPoints和productQuantity)的总和进行计算,其中行属于一个表上的客户(tblSubmissionProducts),然后将该值存储在客户表中的客户记录(tblCustomer)。MySQL:使用另一个表中的计算更新所有记录

  1. 这需要更新为每个客户(10K记录)。
  2. 每个客户在tblSubmissionProducts中可能有0个或更多行。
  3. 只计算其中mixedPoints值> 0

我创建了一个查询一个客户,但它似乎并没有对全表

SET @custID = '9'; 
SELECT customerID, 

(SELECT ROUND(SUM(mixedPointsTotal)/SUM(productQuantity), 2) AS 'Avg Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID), 

(SELECT ROUND(SUM(mixedPointsTotal)/SUM(productQuantity), 2) AS '3mth Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID 
AND submissionProductDate BETWEEN DATE_SUB(NOW(), INTERVAL 3 MONTH) AND NOW()), 

(SELECT ROUND(SUM(mixedPointsTotal)/SUM(productQuantity), 2) AS '6mth Mixed Points' 
FROM tblSubmissionProducts 
WHERE tblSubmissionProducts.customerID = @custID 
AND submissionProductDate BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW()) 

; 

工作这是第一部分该查询的完整列表: 它似乎只锁定表的时间过长,只更新记录的一小部分。我最终不得不取消查询。

任何援助与此将不胜感激。

UPDATE tblCustomer, tblSubmissionProducts 
SET tblCustomer.mixedPoints = 
(SELECT ROUND(SUM(tblSubmissionProducts.mixedPointsTotal)/SUM(tblSubmissionProducts.productQuantity), 2) 
FROM tblSubmissionProducts WHERE tblSubmissionProducts.customerID = tblCustomer.CustomerID 
AND tblSubmissionProducts.mixedPoints > 0); 

非常感谢提前。

回答

1

使用MySQL update-join结构像

UPDATE tblCustomer 
JOIN (SELECT customerID, 
ROUND(SUM(tblSubmissionProducts.mixedPointsTotal)/SUM(tblSubmissionProducts.productQuantity), 2) as colx 
FROM tblSubmissionProducts 
JOIN tblCustomer ON tblSubmissionProducts.customerID = tblCustomer.CustomerID 
WHERE tblSubmissionProducts.mixedPoints > 0) xxx 

ON xxx.customerID = tblCustomer.CustomerID 
SET tblCustomer.mixedPoints = xxx.colx; 
+0

感谢拉胡尔,但恐怕这只是更新一行。 – nads

相关问题