0

我有一个组表(“程序员”、“设计师”、“人力资源”等)和相应的 ID。我还有一张员工表。每个员工都属于一个组。在员工表中,我有一个楼层字段 - 指示他们在哪个楼层。

预计员工表和组表在今年都将保持不变。

我想在名为“constant_floor”的组表中添加一个新字段。如果一个组中的所有员工都在同一楼层,则它将是楼层的编号。否则为0。

关于如何有效实现这一目标的任何想法?我的员工表中有大约 50,000 行和 10,000 个不同的组。

4

1 回答 1

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 tableforeign_keyupdate

此外,也许您可​​以在 中创建一个临时indexfloor_noemployees tableupdate.

sqlFiddle在这里:http ://sqlfiddle.com/#!2/c9866/1

于 2013-01-06T21:48:53.230 回答