2013-06-20 3 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 по теме.

EDIT:

внимание на вопрос, кажется, избегает полного подзапрос. Я думаю, так как нет никаких реальных ограничений на 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 
; 

Это звучит немного странно, что таблица м имеет множество записей с одинаковыми идентификаторами, но так как вы не дали пример, это трудно догадаться.

+0

«Я мог бы сделать полный выбор после набора, но я хочу узнать, как использовать (даже если это возможно) обновление дела для агрегаций ...» –

Смежные вопросы