2013-05-10 86 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