这是我想做的事情:
称为部门的表与称为员工的表具有多对多关系。因此,表 department_employees 具有列:department_id、employee_id、is_active。
索引department_id,employee_id 为pk。
我得到一串员工 ID,例如“12,15,18,19”。我得到部门ID。
我调用了一个 Mysql 存储过程(例程),它应该:
- 将所有员工插入部门
- 如果它们存在且未激活,则激活
- 应停用所有其他员工
创建过程(在 @dep_id INT 中,在 @emp_ids 文本中)
INSERT INTO TBL_DEPARTMENT_EMPLOYEES (DEPARTMENT_ID, EMPLOYEE_ID, IS_ACTIVE) SELECT @dep_id, EMPLOYEE_ID, 1 FROM TBL_EMPLOYEES WHERE FIND_IN_SET(EMPLOYEE_ID, @emp_ids) ON DUPLICATE KEY UPDATE IS_ACTIVE=1;
UPDATE TBL_DEPARTMENT_EMPLOYEES SET IS_ACTIVE=0 WHERE DEPARTMENT_ID=@dep_id 而不是 FIND_IN_SET(EMPLOYEE_ID, @emp_ids);
只有第一个查询运行,我猜第二个查询由于锁定或其他原因而无法运行,我尝试了 TRANSACTION - COMMIT 技巧,没有奏效。我想也许这里有一位很棒的人可以提供帮助,或者 eben 让这一切都在一个查询中运行。谢谢!