群组和他们的地板 - MySQL加入

时间:2013-01-06 19:10:48

标签: mysql join

我有一个小组表(“程序员”,“设计师”,“HR”等)和相应的ID。 我还有一张员工表。每个员工都属于一个组。 在员工表中,我有一个场地 - 表明他们在哪个楼层。

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

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

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

1 个答案:

答案 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