我想执行案例更新,不幸的是我收到一条错误,告诉我正在对组功能进行无效使用
错误代码: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
我知道如何解决这个问题?
我可以在集合后进行完整选择,但我想学习如何使用(即使可能)聚合的案例更新......
答案 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的条目听起来有点奇怪,但是因为你没有给出任何例子,所以很难猜到。