risk_dept_store.sql 1.4 KB

12345678910111213141516171819202122232425262728293031323334
  1. -- ============================================================
  2. -- 把部门表的"终端叶子结点"标记为门店(dept_category='门店')
  3. -- 逻辑:parent_id 不在 dept_id 集合里的 = 叶子节点
  4. -- (即没有任何部门以这个 id 为 parent_id)
  5. -- 同时支持幂等(已经设为门店的不再改)
  6. -- ============================================================
  7. USE risk_control_platform;
  8. UPDATE sys_dept
  9. SET dept_category = '门店'
  10. WHERE del_flag = '0'
  11. AND status = '0'
  12. AND dept_id NOT IN (
  13. SELECT t.parent_id FROM (SELECT DISTINCT parent_id FROM sys_dept
  14. WHERE parent_id IS NOT NULL AND parent_id <> 0 AND del_flag = '0') t
  15. )
  16. AND parent_id <> 0 -- 排除顶级虚拟节点
  17. AND (dept_category IS NULL OR dept_category = '' OR dept_category <> '门店');
  18. -- 验证:看叶子节点被改了几个 + 抽样看几个
  19. SELECT '--- 改后统计 ---' AS info;
  20. SELECT
  21. COUNT(*) AS total,
  22. SUM(CASE WHEN dept_category = '门店' THEN 1 ELSE 0 END) AS store_count,
  23. SUM(CASE WHEN dept_category IS NULL OR dept_category = '' THEN 1 ELSE 0 END) AS unset_count
  24. FROM sys_dept
  25. WHERE del_flag='0' AND status='0' AND parent_id <> 0;
  26. SELECT '--- 抽样 5 个门店 ---' AS info;
  27. SELECT dept_id, dept_name, parent_id, dept_category
  28. FROM sys_dept
  29. WHERE del_flag='0' AND status='0' AND dept_category='门店'
  30. ORDER BY dept_id LIMIT 5;