MySQL 触发 select 插入行的正确值

MySQL trigger select correct value for inserted rows

我需要帮助在 MySql 中构建触发器。 我有一个 'employee' table 结构如下:

id
first name
role

我想创建一个触发器来自动将角色分配给插入的新员工,选择当前在 table 中较少出现的员工。 例如:有两个清洁工,只有 1 个 driver。通过插入字段,自动分配 driver 的角色。 我的问题不在于触发器结构而在于查询中 select 的正确作用。 你能帮帮我吗?

尝试:

CREATE TRIGGER tr_bi_employees
BEFORE INSERT 
ON employees
FOR EACH ROW
SET NEW.role_id = ( SELECT role_id 
                    FROM employees
                    GROUP BY role_id
                    ORDER BY COUNT(*) LIMIT 1 );

此触发器将 select 分配最少人数的工作并将其添加到角色列

架构 (MySQL v5.7)

CREATE TABLE worktable (
  `id` INTEGER,
  `first name` VARCHAR(5),
  `role` VARCHAR(10)
);

INSERT INTO worktable
  (`id`, `first name`, `role`)
VALUES
  ('1', 'test1', 'Cleaner'),
  ('2', 'test2', 'Cleaner'),
  ('3', 'test3', 'Driver'),
  ('4', 'test4', 'Dishwasher');

 DELIMITER $$
 CREATE  TRIGGER `worktable_BEFORE_INSERT` BEFORE INSERT ON `worktable` FOR EACH ROW BEGIN

SET NEW.`role` := (SELECT `role` FROM worktable GROUP BY `role` ORDER BY COUNT(*) LIMIT 1);
END$$
DELIMITER ;

INSERT INTO worktable
  (`id`, `first name`, `role`)
VALUES
  ('5', 'test5', '');

查询#1

SELECT * FROM worktable;

| id  | first name | role       |
| --- | ---------- | ---------- |
| 1   | test1      | Cleaner    |
| 2   | test2      | Cleaner    |
| 3   | test3      | Driver     |
| 4   | test4      | Dishwasher |
| 5   | test5      | Driver     |

View on DB Fiddle