我有一个小组表(“程序员”,“设计师”,“HR”等)和相应的ID。 我还有一张员工表。每个员工都属于一个组。 在员工表中,我有一个场地 - 表明他们在哪个楼层。
预计员工表组表在今年将保持不变。
我想在groups表中添加一个名为“constant_floor”的新字段。如果一个组中的所有员工都在同一楼层,那么它将是楼层的数量。否则它将为0.
关于如何有效实现这一目标的任何想法?我的员工表和10,000个不同的组中有大约50,000行。
答案 0 :(得分:1)
此查询应该执行您想要实现的目标:
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
的{{1}}上创建一个临时employees table
,然后在update
之后将其删除。
sqlFiddle:http://sqlfiddle.com/#!2/c9866/1