mysql - 组及其楼层 - MySQL 加入

标签 mysql join

我有一个组表(“程序员”、“设计师”、“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);

我假设您有 indexgroup_idemployees table (也许通过 foreign_key 关系)。如果您没有,我建议您创建一个)。 update那么查询应该不会花费很多时间。

此外,也许您可​​以创建一个临时 indexfloor_noemployees table并在 update 之后删除它.

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

关于mysql - 组及其楼层 - MySQL 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14185721/

相关文章:

php - CodeIgniter 有时会收到消息查询错误

php - 在php中按id对显示的结果进行排序

mysql - 左连接查询返回的数据不正确

sql - 尝试显示Using Sum() with JOIN 未提供正确的输出

MySQL JOIN 语法优先级

MySQL外键ON DELETE SET NULL检查数据类型错误

mysql - SQL中的intval和db_escape有什么区别?

MySQL Left join(我认为)帮助

mysql - 使用 join 而不是子选择更改 sql 查询

具有三个未索引的联合表和一个左连接的 MySQL 查询负担过重的数据库