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

どうすればこれを修正できますか?

セットの後に完全な選択を行うこともできますが、集計のケース更新を (可能であれば) 使用する方法を学びたいです...

4

1 に答える 1

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 更新クエリを参照してください。

編集:

質問の焦点は、完全なサブセレクトを回避しているようです。データベースがwithlのすべての行を通過しなければならないという実際の制限はないと思います。したがって、次のようにグループ化することを想像できます。mevent="rRequested"ml.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 のエントリが多数あるのは少し奇妙に聞こえますが、例を挙げていないため、推測するのは困難です。

于 2013-06-20T11:51:42.127 に答える