2013-06-20 61 views
0

我想執行的情況下更新,不幸的是我得到的是告訴我,我做的無效使用組功能的錯誤更新的情況下,兩個表和計數

錯誤代碼: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

您嘗試區分根據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"。所以,我能想象通過l.id通過m分組去一次:

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的條目,但因爲你沒有給出例子,它是很難猜測。

+0

「我可以在設置後做一個完整的選擇,但我想學習如何使用(即使有可能)聚合情況更新...」 –