案例更新,两个表和计数

时间:2013-06-20 11:44:31

标签: mysql

我想执行案例更新,不幸的是我收到一条错误,告诉我正在对组功能进行无效使用

  

错误代码:1111。无效使用群组功能

update  l,   m
    set l.requests = sum(
            case when m.event = 'rRequested' then  
                m.id end  )
    where 
        l.id = m.id

update  l,   m
    set l.requests =  (
            case when m.event = 'rRequested' then  
                count(m.id) end  )
    where 
        l.id = m.id

我知道如何解决这个问题?

我可以在集合后进行完整选择,但我想学习如何使用(即使可能)聚合的案例更新......

1 个答案:

答案 0 :(得分:0)

您尝试基于m.event进行区分,结果是分组值(count(m.id))。我认为你应该根据你的价值加0或1。

update l 
set l.request = (select sum(if m.event = "rRequested", 0, 1) from m where m.id = l.id))

有关该主题,请参阅MySQL Update query with left join and group by

编辑:

问题的重点似乎是避免完整的子选择。我认为,由于l没有真正的限制,因此数据库必须通过m event="rRequested"的所有行。所以我可以想象通过m分组l.id进行一次:

update l 
inner join 
(
    select id, 
    count(*) as cnt 
    from m where  m.event = "rRequested" 
    group by id
) as grp_m on grp_m.id = l.id
set l.request = grp_m.cnt
;

表m有很多具有相同id的条目听起来有点奇怪,但是因为你没有给出任何例子,所以很难猜到。