2013-05-10 83 views
11

這種類型的東西以前曾被問過幾次,但並不完全是我在尋找的東西。我需要SET兩行等於子查詢的不同部分。更新子查詢中的多個列

我目前正在使用:

UPDATE records 
SET leads=(SELECT COUNT(*) FROM leads_table WHERE leads_table.blah=records.blah), 
earnings=(SELECT SUM(amount) FROM leads_table WHERE leads_table.blah=records.blah) 

的WHERE語句得到明顯簡化...但基本上它同子查詢,但我不認爲我應該被運行兩次呢?

我想要做這樣的事情......

UPDATE records 
SET (leads,earnings)=(SELECT COUNT(*),SUM(amount) FROM leads_table WHERE leads_table.blah=records.blah) 

回答

26

你可以簡單地加入的表中做一些計算子查詢,

UPDATE records a 
     INNER JOIN 
     (
      SELECT blah, 
        COUNT(*) totalCount, 
        SUM(amount) totalSum 
      FROM leads_table 
      GROUP BY blah 
     ) b ON b.blah = a.blah 
SET  a.leads = b.totalCount 
     a.earnings = b.totalSum 
+1

很不錯的解決方案.... +1 – sarwar026 2013-09-10 09:42:46

+0

確實很好,優雅而快速。 – Daddy32 2015-09-19 14:55:20

+1

速度快嗎?即使你只選擇一個,它會不會計算/總計每一個等級? – nbransby 2015-11-24 14:02:50