一尘不染

带有左联接和分组依据的MySQL Update查询

mysql

我正在尝试创建一个更新查询,并且在获取正确的语法方面进展甚微。以下查询正在运行:

SELECT t.Index1, t.Index2, COUNT( m.EventType ) 
    FROM Table t
    LEFT JOIN MEvents m ON
        (m.Index1 = t.Index1 AND
         m.Index2 = t.Index2 AND
        (m.EventType =  'A' OR m.EventType =  'B')
    ) 
    WHERE (t.SpecialEventCount IS NULL)
    GROUP BY t.Index1, t.Index2

它创建一个三元组的列表Index1,Index2,EventCounts。仅在t.SpecialEventCount为NULL的情况下才这样做。我尝试编写的更新查询应将此SpecialEventCount设置为该计数,即上述查询中的COUNT(m.EventType)。此数字可以是0或任何正数(因此为左联接)。索引1和索引2在一起在表t中是唯一的,它们用于标识MEvent中的事件。

如何将选择查询修改为更新查询?即像

UPDATE Table SET SpecialEventCount=COUNT(m.EventType).....

但是我对放置在什么位置上的东西感到困惑,并以许多不同的猜测失败了。


阅读 193

收藏
2020-05-17

共1个答案

一尘不染

我认为这(Index1, Index2)是对的唯一键Table,否则我希望引用t.SpecialEventCount会导致错误。

编辑查询以使用子查询,因为它无法使用 GROUP BY

UPDATE
    Table AS t
    LEFT JOIN (
        SELECT
            Index1,
            Index2,
            COUNT(EventType) AS NumEvents
        FROM
            MEvents
        WHERE
            EventType = 'A' OR EventType = 'B'
        GROUP BY
            Index1,
            Index2
    ) AS m ON
        m.Index1 = t.Index1 AND
        m.Index2 = t.Index2
SET
    t.SpecialEventCount = m.NumEvents
WHERE
    t.SpecialEventCount IS NULL
2020-05-17