我有一个组表(“程序员”、“设计师”、“人力资源”等)和相应的 ID。我还有一张员工表。每个员工都属于一个组。在员工表中,我有一个楼层字段 - 指示他们在哪个楼层。
预计员工表和组表在今年都将保持不变。
我想在名为“constant_floor”的组表中添加一个新字段。如果一个组中的所有员工都在同一楼层,则它将是楼层的编号。否则为0。
关于如何有效实现这一目标的任何想法?我的员工表中有大约 50,000 行和 10,000 个不同的组。
这个查询应该做你想要实现的:
update
groups g
left join
(select floor_no, group_id, count(distinct floor_no)
from employees group by group_id having count(distinct floor_no) = 1) temp
on g.id = temp.group_id
set g.constant_floor = ifnull(temp.floor_no, 0);
我假设您index
在(也许通过关系)group_id
中有一个。如果您没有,我建议您创建一个)。那么查询应该不会花费很多时间。employees table
foreign_key
update
此外,也许您可以在 中创建一个临时index
的floor_no
并employees table
在update
.
sqlFiddle在这里:http ://sqlfiddle.com/#!2/c9866/1