1.部门表:T_SYS_DEPT
部门表部分字段:
private String id; private String name; // 部门名称 private String code; // 部门编码 private String type; // 1部门0机构 private String parentId; // 上级ID,父级ID private String levelCode; // 层级CODE,例如00001,00001,00001
2.部门关系维护表:T_SYS_DEPT_TYPE
部门关系维护表部分字段:private String id; // 主键ID private String code; // 部门关系编号 private String name; // 部门关系名称 private String isParentFlag; // 是否父级: 000-是,001-否
3.部门关系所属机构或部门表实体表:T_SYS_DEPT_TYPE_RELATION
字段:
private String id; // 主键ID private String deptTypeId; // 部门关系ID private String deptId; // 机构或部门ID
场景:
机构:【P0099/总部】,【P0100/上海分行】
部门:除上述机构外,其余都是部门
问题:根据部门关系维护表【T_SYS_DEPT_TYPE】中的数据,【C00990204/科技部】对应的上级部门是【C009902/金融科技部】,需要将上级部门数据修正
解决方案:
1.查询出所有错误上级部门的部门信息
SELECT * FROM ( SELECT UP_B.CODE 父级部门CODE, UP_B.NAME 父级部门NAME, A.CODE 子级部门CODE, A.NAME 子级部门NAME, UP_DB.ID 上级部门ID, UP_DB.CODE 上级部门CODE, UP_DB.NAME 上级部门NAME, DA.ID 部门ID, DA.CODE 部门CODE, DA.NAME 部门NAME FROM T_SYS_DEPT_TYPE_RELATION TR, -- 部门关系所属机构或部门表实体表 T_SYS_DEPT_TYPE A, -- 部门关系维护表 子级部门 T_SYS_DEPT_TYPE UP_B, -- 部门关系维护表 上级部门 T_SYS_DEPT DA, -- 部门表 子级部门 T_SYS_DEPT UP_DB -- 部门表 上级部门 WHERE TR.DEPT_TYPE_ID = A.ID AND A.IS_PARENT_FLAG = '001' AND TR.DEPT_ID = UP_B.ID AND DA.CODE = A.CODE AND UP_DB.CODE != UP_B.CODE AND DA."TYPE" = '1' AND UP_DB."TYPE" = '1' AND DA.PARENT_ID = UP_DB.ID GROUP BY UP_B.CODE, UP_B.NAME, A.CODE, A.NAME, UP_DB.ID, UP_DB.CODE, UP_DB.NAME, DA.ID, DA.CODE, DA.NAME )
2.修改部门的层级code
--因为层级code很长,需要将对应错误的code替换掉 UPDATE T_SYS_DEPT U_DEPT SET U_DEPT.LEVEL_CODE =replace(U_DEPT.LEVEL_CODE, U_DEPT.PARENT_ID, ( SELECT ORG_DEPT.ID FROM T_SYS_DEPT ORG, T_SYS_DEPT UP_DEPT, T_SYS_DEPT DEPT, T_SYS_DEPT ORG_DEPT, (SELECT UP_B.CODE UP_CODE, DA.CODE FROM T_SYS_DEPT_TYPE_RELATION TR, T_SYS_DEPT_TYPE A, T_SYS_DEPT_TYPE UP_B, T_SYS_DEPT DA, T_SYS_DEPT UP_DB WHERE TR.DEPT_TYPE_ID = A.ID AND A.IS_PARENT_FLAG = '001' AND TR.DEPT_ID = UP_B.ID AND DA.CODE = A.CODE AND UP_DB.CODE != UP_B.CODE AND DA."TYPE" = '1' AND UP_DB."TYPE" = '1' AND DA.PARENT_ID = UP_DB.ID GROUP BY UP_B.CODE, DA.CODE) CORRECT_DEPT WHERE UP_DEPT."TYPE" = '1' AND UP_DEPT.PARENT_ID = ORG.ID AND ORG."TYPE" = '0' AND ORG.ID = ORG_DEPT.PARENT_ID AND DEPT.PARENT_ID = UP_DEPT.ID AND DEPT.CODE = CORRECT_DEPT.CODE AND ORG_DEPT.CODE = CORRECT_DEPT.UP_CODE AND DEPT.ID = U_DEPT.ID )) WHERE EXISTS (SELECT 1 FROM T_SYS_DEPT_TYPE_RELATION TR, T_SYS_DEPT_TYPE A, T_SYS_DEPT_TYPE UP_B, T_SYS_DEPT DA, T_SYS_DEPT UP_DB WHERE TR.DEPT_TYPE_ID = A.ID AND A.IS_PARENT_FLAG = '001' AND TR.DEPT_ID = UP_B.ID AND DA.CODE = A.CODE AND UP_DB.CODE != UP_B.CODE AND DA."TYPE" = '1' AND UP_DB."TYPE" = '1' AND DA.PARENT_ID = UP_DB.ID AND DA.ID = U_DEPT.ID ) --AND U_DEPT.CODE = 'C00990204'
3.修改部门的上级部门【PARENT_ID 】
UPDATE T_SYS_DEPT U_DEPT SET U_DEPT.PARENT_ID = ( SELECT ORG_DEPT.ID FROM T_SYS_DEPT ORG, T_SYS_DEPT UP_DEPT, T_SYS_DEPT DEPT, T_SYS_DEPT ORG_DEPT, (SELECT UP_B.CODE UP_CODE, DA.CODE FROM T_SYS_DEPT_TYPE_RELATION TR, T_SYS_DEPT_TYPE A, T_SYS_DEPT_TYPE UP_B, T_SYS_DEPT DA, T_SYS_DEPT UP_DB WHERE TR.DEPT_TYPE_ID = A.ID AND A.IS_PARENT_FLAG = '001' AND TR.DEPT_ID = UP_B.ID AND DA.CODE = A.CODE AND UP_DB.CODE != UP_B.CODE AND DA."TYPE" = '1' AND UP_DB."TYPE" = '1' AND DA.PARENT_ID = UP_DB.ID GROUP BY UP_B.CODE, DA.CODE) CORRECT_DEPT WHERE UP_DEPT."TYPE" = '1' AND UP_DEPT.PARENT_ID = ORG.ID AND ORG."TYPE" = '0' AND ORG.ID = ORG_DEPT.PARENT_ID AND DEPT.PARENT_ID = UP_DEPT.ID AND DEPT.CODE = CORRECT_DEPT.CODE AND ORG_DEPT.CODE = CORRECT_DEPT.UP_CODE AND DEPT.ID = U_DEPT.ID ) WHERE EXISTS (SELECT 1 FROM T_SYS_DEPT_TYPE_RELATION TR, T_SYS_DEPT_TYPE A, T_SYS_DEPT_TYPE UP_B, T_SYS_DEPT DA, T_SYS_DEPT UP_DB WHERE TR.DEPT_TYPE_ID = A.ID AND A.IS_PARENT_FLAG = '001' AND TR.DEPT_ID = UP_B.ID AND DA.CODE = A.CODE AND UP_DB.CODE != UP_B.CODE AND DA."TYPE" = '1' AND UP_DB."TYPE" = '1' AND DA.PARENT_ID = UP_DB.ID AND DA.ID = U_DEPT.ID ) --AND U_DEPT.CODE = 'C00990204'
SQL批量修改部门的上级ID
最新推荐文章于 2025-05-27 15:26:45 发布