0

グループ (「プログラマー」、「デザイナー」、「HR」など) と対応する ID のテーブルがあります。従業員のテーブルもあります。各従業員はグループに属しています。従業員テーブルには、従業員がどのフロアにいるかを示すフロア フィールドがあります。

両方の employees テーブル groups テーブルは、今年中に変更されないままであると予想されます。

「constant_floor」というグループ テーブルに新しいフィールドを追加したいと考えています。グループ内の全従業員が同じ階にいる場合は、その階の番号になります。それ以外の場合は 0 になります。

それを効率的に達成する方法についてのアイデアはありますか?employees テーブルには約 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

また、で一時的なindexonfloor_noを作成し、のemployees table後に削除することもできますupdate

ここにsqlFiddle:http ://sqlfiddle.com/#!2/c9866/1

于 2013-01-06T21:48:53.230 に答える