我试图创建一个更新查询,但在获取正确语法方面几乎没有进展.

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的列表.

如何将select查询修改为update查询?比如说

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

但我不知道该把什么放在哪里,并因无数不同的猜测而失败.

推荐答案

我认为(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

Mysql相关问答推荐

JPA对具有动态键和动态值的JSON列的原生查询

仅获取我不是最后一个 comments 者的博客帖子

查询具有JSON对象数组的列时,JSON_CONTAINS的MySQL语法错误

将类图转换为SQL数据库

GoRM中行最大值查询返回"0"

避免多个SQL查询的重构代码

过滤值为0时如何在MySQL查询中设置条件?

Mysql时间序列数据的最小值和最大值

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

在 Spring Data jpa 中的 @Query 中无法识别本机查询

MYSQL除以零警告,奇怪的行为

Golang Gorm:相同的查询构造不同,抛出不同的结果

显示值为空的所有列名

MySQL Group By 和 Sum 其他列的总值

没有 JDBC 类型的方言映射:1111

MySQL SELECT 增量计数器

#1146 - 表 'phpmyadmin.pma_recent' 不存在

由于在 MySQL 中使用保留字作为表名或列名导致的语法错误

在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

来自 MySQL 中多个表的 COUNT(*)