2026-08-03-crm-contract-no-check-duplicates.sql 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. -- 合同编号重复排查(只读,不改数据)
  2. -- 库:shanxia2.0 / crm_contract
  3. -- 用途:检查租户内 contract_no 是否仍有重复(含软删)
  4. SET NAMES utf8mb4;
  5. -- 1) 按 (contract_no, tenant_no) 分组:任何重复(含软删)
  6. SELECT
  7. contract_no,
  8. tenant_no,
  9. COUNT(*) AS cnt,
  10. SUM(CASE WHEN del_flag = 0 THEN 1 ELSE 0 END) AS alive_cnt,
  11. SUM(CASE WHEN del_flag = 1 THEN 1 ELSE 0 END) AS deleted_cnt,
  12. GROUP_CONCAT(
  13. CONCAT(id, '/del', del_flag, '/', IFNULL(customer_name, ''))
  14. ORDER BY del_flag, create_time
  15. SEPARATOR ' | '
  16. ) AS detail
  17. FROM crm_contract
  18. GROUP BY contract_no, tenant_no
  19. HAVING COUNT(*) > 1
  20. ORDER BY cnt DESC, contract_no;
  21. -- 2) 仅有效单据 (del_flag=0) 是否撞号
  22. SELECT
  23. contract_no,
  24. tenant_no,
  25. COUNT(*) AS alive_cnt,
  26. GROUP_CONCAT(id ORDER BY create_time SEPARATOR ' | ') AS ids,
  27. GROUP_CONCAT(IFNULL(customer_name, '') ORDER BY create_time SEPARATOR ' | ') AS customers
  28. FROM crm_contract
  29. WHERE del_flag = 0
  30. GROUP BY contract_no, tenant_no
  31. HAVING COUNT(*) > 1
  32. ORDER BY alive_cnt DESC, contract_no;
  33. -- 3) 指定编号示例:SX/X-JT20260803001(含改号后的 ~DEL~ 变体)
  34. SELECT
  35. id,
  36. contract_no,
  37. contract_name,
  38. customer_name,
  39. status,
  40. del_flag,
  41. create_time,
  42. update_time
  43. FROM crm_contract
  44. WHERE tenant_no = 'shanxia2.0'
  45. AND (
  46. contract_no = 'SX/X-JT20260803001'
  47. OR contract_no LIKE 'SX/X-JT20260803001~%'
  48. )
  49. ORDER BY del_flag, create_time;
  50. -- 4) 当前唯一索引是否已是全局唯一版
  51. SHOW INDEX FROM crm_contract WHERE Key_name LIKE 'uk_contract%';