我有一个组表(“程序员”、“设计师”、“HR”等)和相应的 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
关于mysql - 组及其楼层 - MySQL 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14185721/