MySQL如何将COUNT统计的员工数插入company表对应品牌的指定行
现有代码的错误点梳理
- 表名前后不统一:你实际创建的表为公司表
company、员工表ergazomenos,但后续代码中查询使用employee、插入使用etaireia,和实际建表命名不匹配,执行会直接触发“表不存在”的报错 - 语句类型选错:你需要为
company表中已存在的ASUS对应行补充员工数字段值,这类修改存量行字段的操作需使用UPDATE语句;INSERT的作用是新增完整记录行,直接用INSERT写入员工计数,会生成一条缺失主键BrandName的无效新行,既无法匹配ASUS的存量数据,还会触发主键非空约束报错 - 逻辑缺少行定位条件:更新操作必须指定目标行的匹配规则,否则会将员工数批量赋值给全表所有公司行
可直接运行的正确实现代码
首先执行新增列操作(若已完成可跳过):
-- 按你最初需求的列名新增员工数字段,也可沿用你写的NoOfEmp命名 ALTER TABLE company ADD NumberOfEmployees int;
单独为ASUS公司填充员工数
UPDATE company SET NumberOfEmployees = ( SELECT COUNT(*) FROM ergazomenos WHERE BrandName = 'ASUS' ) -- 核心匹配条件:仅更新BrandName为ASUS的行 WHERE BrandName = 'ASUS';
批量为所有公司填充对应员工数(推荐)
不需要逐家写匹配条件,可通过关联更新一次性完成全表计算:
UPDATE company c LEFT JOIN ( -- 按公司分组统计每家的员工总数 SELECT BrandName, COUNT(*) AS emp_total FROM ergazomenos GROUP BY BrandName ) stat ON c.BrandName = stat.BrandName -- 无员工的公司默认填充0 SET c.NumberOfEmployees = IFNULL(stat.emp_total, 0);
内容的提问来源于stack exchange,提问作者notsavv
相关产品推荐
相关产品推荐

