mysql - 基于mysql中两个表的JOIN更新多个字段

标签 mysql

我正在尝试将以下 2 个更新语句合并到一个查询中,因为它们都在同一个表上工作。

我的 school.present 计数根据 children.attendance=PRESENT 状态的计数更新

UPDATE school s SET s.present=(SELECT count(children.id) FROM children c 
WHERE c.school_id =s._id  AND c.attendance='PRESENT') 

同样,school.danced 计数根据 children.activity=DANCE 状态的计数更新

UPDATE school s SET s.danced=(SELECT count(children.id) FROM children c 
WHERE c.school_id =s._id  AND c.activity='DANCE') 

是否可以将两者合并以节省查询数量?

我目前的尝试是将两者合并到以下内容中 - 但我认为这将导致与上面相同的两个查询

UPDATE school s SET 
s.danced=(SELECT count(children.id) FROM children c 
WHERE c.school_id =s._id  AND c.activity='DANCE'),  
s.present=(SELECT count(children.id) FROM children c 
WHERE c.school_id =s._id  AND c.attendance='PRESENT') 

是否有更好的方法来实现这一目标,或者上述方法是否尽可能高效?

最佳答案

使用包含两个聚合的更新连接:

UPDATE school s
INNER JOIN
(
    SELECT
        school_id,
        COUNT(CASE WHEN attendance = 'PRESENT' THEN 1 END) AS p_cnt,
        COUNT(CASE WHEN attendance = 'DANCE'   THEN 1 END) AS d_cnt
    FROM children
    GROUP BY school_id
) c
    ON s._id = c.school_id
SET
    present = c.p_cnt,
    danced = c.d_cnt;

关于mysql - 基于mysql中两个表的JOIN更新多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589385/

相关文章:

mysql - 使用 union mysql 选择查询进行分组

php - JQuery - 动态更改页面

php - MySQL INSERT 查询 - 不再有效

MySQL 计数应用程序的总登录时间

mysql - 选择数据库

javascript - 要求(对我的 Assets 显示路线)#node

mysql - 引用十进制值

mysql - 统计成员(member)id的记录数

MySQL 与 asp.net MVC

php - 当循环的一部分时,仅将唯一值插入 MySQL