如何从关联Employees表取值更新Companies表的BusinessType字段
解决方案
因为题目已明确同一家公司关联的所有员工BusinessType值完全一致,不需要处理值冲突问题,以下提供不同场景下的SQL写法:
SQL Server 写法
直接使用UPDATE FROM关联更新,执行效率最高:UPDATE c SET c.BusinessType = e.BusinessType FROM Companies c INNER JOIN Employees e ON c.Id = e.CompanyIdMySQL 写法
语法和SQL Server略有差异,关联逻辑写在SET之前:UPDATE Companies c INNER JOIN Employees e ON c.Id = e.CompanyId SET c.BusinessType = e.BusinessType全数据库通用写法
用标量子查询实现,适配所有关系型数据库,以下示例为SQL Server语法,其他数据库调整取首行的语法即可:
不同数据库的取首行语法替换规则:UPDATE Companies SET BusinessType = ( SELECT TOP 1 BusinessType FROM Employees WHERE CompanyId = Companies.Id ) -- 以下条件避免没有员工的公司BusinessType被更新为NULL,不需要可删除 WHERE EXISTS ( SELECT 1 FROM Employees WHERE CompanyId = Companies.Id )- Oracle 替换
TOP 1为FETCH FIRST 1 ROW ONLY - MySQL、PostgreSQL 替换
TOP 1为LIMIT 1
- Oracle 替换
注意事项
- 没有关联员工的公司如果需要保留原有
BusinessType值,必须加上EXISTS条件过滤 - 若涉及大表更新需求,建议提前开启事务控制,避免更新出错无法回滚
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

