You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将基于两表关联的两个MySQL更新语句合并为单查询

合并两个UPDATE语句为单个查询的解决方案

没问题!你完全可以把这两个更新操作合并成一个查询,这样能减少数据库访问次数,效率更高。下面给你两种可行的写法:

写法一:直接在SET子句中包含两个统计子查询

这种写法最直观,和你原来的逻辑保持一致,只是把两个更新字段放在同一个UPDATE语句里:

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

写法二:用聚合子查询一次性计算统计值(更高效)

如果你的数据集比较大,上面的写法会扫描两次children表。下面的写法只需要扫描一次表,通过条件聚合算出每个学校的两个统计值,再关联更新,性能更优:

UPDATE school s
JOIN (
    SELECT 
        school_id,
        COUNT(CASE WHEN attendance = 'PRESENT' THEN id END) AS present_count,
        COUNT(CASE WHEN activity = 'DANCE' THEN id END) AS danced_count
    FROM children
    GROUP BY school_id
) c_stats ON c_stats.school_id = s._id
SET 
    s.present = c_stats.present_count,
    s.danced = c_stats.danced_count

第二种写法里,CASE WHEN会只统计符合条件的记录,COUNT会忽略NULL值,刚好能得到我们需要的数量,非常适合这种多维度统计的场景。

内容的提问来源于stack exchange,提问作者HopeKing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:29:08