2016-11-24 2 views
0

2つのカラム(mixedPointsおよびproductQuantity)の合計を使用して1つのテーブル(tblSubmissionProducts)の顧客に属する行を計算し、顧客テーブルの顧客レコード(tblCustomer)。MySQL:別のテーブルからの計算を使用してすべてのレコードを更新する

  1. これは、すべての顧客(10kレコード)ごとに更新する必要があります。
  2. 各お客様は、tblSubmissionProductsに0行以上あることがあります。
  3. のみ場所> 0

mixedPoints値を算出し、私は一人の顧客のためのクエリを作成したが、それは

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

関連する問題